V1
This commit is contained in:
parent
ac1c373a01
commit
8d771ec57c
1781
composer-setup.php
Normal file
1781
composer-setup.php
Normal file
File diff suppressed because it is too large
Load Diff
5
composer.json
Normal file
5
composer.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"require": {
|
||||
"tecnickcom/tcpdf": "^6.4"
|
||||
}
|
||||
}
|
||||
90
composer.lock
generated
Normal file
90
composer.lock
generated
Normal file
@ -0,0 +1,90 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "9b715eea9ba573833974a4c60540dc87",
|
||||
"packages": [
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"version": "6.10.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tecnickcom/TCPDF.git",
|
||||
"reference": "ca5b6de294512145db96bcbc94e61696599c391d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/ca5b6de294512145db96bcbc94e61696599c391d",
|
||||
"reference": "ca5b6de294512145db96bcbc94e61696599c391d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"php": ">=7.1.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"config",
|
||||
"include",
|
||||
"tcpdf.php",
|
||||
"tcpdf_barcodes_1d.php",
|
||||
"tcpdf_barcodes_2d.php",
|
||||
"include/tcpdf_colors.php",
|
||||
"include/tcpdf_filters.php",
|
||||
"include/tcpdf_font_data.php",
|
||||
"include/tcpdf_fonts.php",
|
||||
"include/tcpdf_images.php",
|
||||
"include/tcpdf_static.php",
|
||||
"include/barcodes/datamatrix.php",
|
||||
"include/barcodes/pdf417.php",
|
||||
"include/barcodes/qrcode.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-3.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicola Asuni",
|
||||
"email": "info@tecnick.com",
|
||||
"role": "lead"
|
||||
}
|
||||
],
|
||||
"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
|
||||
"homepage": "http://www.tcpdf.org/",
|
||||
"keywords": [
|
||||
"PDFD32000-2008",
|
||||
"TCPDF",
|
||||
"barcodes",
|
||||
"datamatrix",
|
||||
"pdf",
|
||||
"pdf417",
|
||||
"qrcode"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/tecnickcom/TCPDF/issues",
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2025-05-27T18:02:28+00:00"
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": {},
|
||||
"platform-dev": {},
|
||||
"plugin-api-version": "2.6.0"
|
||||
}
|
||||
64
dashboard.php
Normal file
64
dashboard.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
session_start();
|
||||
|
||||
if (!isset($_SESSION['user_id'])) {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$role = $_SESSION['role'] ?? 'guest';
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Dashboard - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h1 class="text-3xl font-bold text-gray-800">Welcome to your Dashboard</h1>
|
||||
<p class="text-gray-600 mt-2">Your role is: <span class="font-bold text-green-500"><?= htmlspecialchars(ucfirst($role)) ?></span></p>
|
||||
<p class="mt-4">This is the main content area. More features will be added here soon!</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="#" class="block py-4 px-4 text-white font-bold no-underline">Dashboard</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/employees.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Employees</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll_history.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll History</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
18
db/create_database.php
Normal file
18
db/create_database.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/config.php';
|
||||
|
||||
try {
|
||||
// Connect to MySQL server without specifying a database
|
||||
$pdo = new PDO('mysql:host='.DB_HOST, DB_USER, DB_PASS, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
]);
|
||||
echo "Connected to MySQL server successfully.\n";
|
||||
|
||||
// Create the database if it doesn't exist
|
||||
$pdo->exec("CREATE DATABASE IF NOT EXISTS `" . DB_NAME . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;");
|
||||
echo "Database '" . DB_NAME . "' created or already exists.\n";
|
||||
|
||||
} catch (PDOException $e) {
|
||||
die("Database creation failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
|
||||
56
db/migrations/001_initial_schema.php
Normal file
56
db/migrations/001_initial_schema.php
Normal file
@ -0,0 +1,56 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../config.php';
|
||||
|
||||
try {
|
||||
$pdo = db();
|
||||
echo "Connected to database successfully.\n";
|
||||
|
||||
$sql = <<<SQL
|
||||
CREATE TABLE IF NOT EXISTS `companies` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`name` VARCHAR(255) NOT NULL,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`company_id` INT NOT NULL,
|
||||
`email` VARCHAR(255) NOT NULL UNIQUE,
|
||||
`password` VARCHAR(255) NOT NULL,
|
||||
`role` ENUM('super_admin', 'admin', 'employee', 'manager', 'payroll_clerk', 'accountant', 'auditor') NOT NULL,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `employees` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`user_id` INT NOT NULL,
|
||||
`company_id` INT NOT NULL,
|
||||
`first_name` VARCHAR(100) NOT NULL,
|
||||
`last_name` VARCHAR(100) NOT NULL,
|
||||
`date_of_birth` DATE,
|
||||
`hire_date` DATE,
|
||||
`position` VARCHAR(255),
|
||||
`basic_salary` DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `settings` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`company_id` INT NOT NULL,
|
||||
`setting_key` VARCHAR(255) NOT NULL,
|
||||
`setting_value` TEXT,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY `company_setting` (`company_id`, `setting_key`),
|
||||
FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
SQL;
|
||||
|
||||
$pdo->exec($sql);
|
||||
echo "Successfully created initial tables: companies, users, employees, settings.\n";
|
||||
|
||||
} catch (PDOException $e) {
|
||||
die("Database migration failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
48
db/migrations/002_payroll_tables.php
Normal file
48
db/migrations/002_payroll_tables.php
Normal file
@ -0,0 +1,48 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../config.php';
|
||||
|
||||
try {
|
||||
$pdo = db();
|
||||
echo "Connected to database successfully.\n";
|
||||
|
||||
$sql = <<<SQL
|
||||
CREATE TABLE IF NOT EXISTS `payroll_runs` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`company_id` INT NOT NULL,
|
||||
`pay_period_month` INT NOT NULL,
|
||||
`pay_period_year` INT NOT NULL,
|
||||
`status` ENUM('draft', 'completed') NOT NULL DEFAULT 'draft',
|
||||
`run_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY `company_period` (`company_id`, `pay_period_year`, `pay_period_month`),
|
||||
FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `payslips` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`payroll_run_id` INT NOT NULL,
|
||||
`employee_id` INT NOT NULL,
|
||||
`gross_pay` DECIMAL(15, 2) NOT NULL,
|
||||
`total_deductions` DECIMAL(15, 2) NOT NULL,
|
||||
`net_pay` DECIMAL(15, 2) NOT NULL,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (`payroll_run_id`) REFERENCES `payroll_runs`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `payslip_items` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`payslip_id` INT NOT NULL,
|
||||
`type` ENUM('earning', 'deduction', 'tax') NOT NULL,
|
||||
`description` VARCHAR(255) NOT NULL,
|
||||
`amount` DECIMAL(15, 2) NOT NULL,
|
||||
FOREIGN KEY (`payslip_id`) REFERENCES `payslips`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
SQL;
|
||||
|
||||
$pdo->exec($sql);
|
||||
echo "Successfully created payroll tables: payroll_runs, payslips, payslip_items.\n";
|
||||
|
||||
} catch (PDOException $e) {
|
||||
die("Database migration failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
|
||||
70
db/migrations/003_leave_tables.php
Normal file
70
db/migrations/003_leave_tables.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../config.php';
|
||||
|
||||
try {
|
||||
$pdo = db();
|
||||
echo "Connected to database successfully.\n";
|
||||
|
||||
$sql = <<<SQL
|
||||
CREATE TABLE IF NOT EXISTS `leave_types` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`company_id` INT NOT NULL,
|
||||
`name` VARCHAR(100) NOT NULL,
|
||||
`days_per_year` INT NOT NULL DEFAULT 0,
|
||||
`is_accrued` BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (`company_id`) REFERENCES `companies`(`id`) ON DELETE CASCADE
|
||||
) ENGINE=INNODB;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `leave_requests` (
|
||||
`id` INT AUTO_INCREMENT PRIMARY KEY,
|
||||
`employee_id` INT NOT NULL,
|
||||
`leave_type_id` INT NOT NULL,
|
||||
`start_date` DATE NOT NULL,
|
||||
`end_date` DATE NOT NULL,
|
||||
`reason` TEXT,
|
||||
`status` ENUM('pending', 'approved', 'rejected') NOT NULL DEFAULT 'pending',
|
||||
`reviewed_by` INT NULL, -- user_id of the admin/manager
|
||||
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (`employee_id`) REFERENCES `employees`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`leave_type_id`) REFERENCES `leave_types`(`id`) ON DELETE CASCADE,
|
||||
FOREIGN KEY (`reviewed_by`) REFERENCES `users`(`id`) ON DELETE SET NULL
|
||||
) ENGINE=INNODB;
|
||||
|
||||
-- Add a default leave type for existing companies
|
||||
-- This is a bit of a hack for a migration, but useful for development
|
||||
-- In a real app, this would be handled by an application setup process
|
||||
|
||||
SQL;
|
||||
|
||||
$pdo->exec($sql);
|
||||
echo "Successfully created leave tables: leave_types, leave_requests.\n";
|
||||
|
||||
// Add some default leave types for any existing companies to make testing easier
|
||||
$stmt = $pdo->query("SELECT id FROM companies");
|
||||
$companies = $stmt->fetchAll(PDO::FETCH_COLUMN);
|
||||
|
||||
$default_leave_types = [
|
||||
['name' => 'Annual Leave', 'days' => 21],
|
||||
['name' => 'Sick Leave', 'days' => 10],
|
||||
['name' => 'Maternity Leave', 'days' => 90]
|
||||
];
|
||||
|
||||
$insert_stmt = $pdo->prepare("INSERT INTO leave_types (company_id, name, days_per_year) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE name=name"); // Using ON DUPLICATE to avoid errors on re-run
|
||||
|
||||
foreach ($companies as $company_id) {
|
||||
foreach ($default_leave_types as $type) {
|
||||
// Check if it exists first to be truly idempotent
|
||||
$check_stmt = $pdo->prepare("SELECT id FROM leave_types WHERE company_id = ? AND name = ?");
|
||||
$check_stmt->execute([$company_id, $type['name']]);
|
||||
if (!$check_stmt->fetch()) {
|
||||
$insert_stmt->execute([$company_id, $type['name'], $type['days']]);
|
||||
}
|
||||
}
|
||||
}
|
||||
echo "Added default leave types for existing companies.\n";
|
||||
|
||||
|
||||
} catch (PDOException $e) {
|
||||
die("Database migration failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
18
db/migrations/004_add_superadmin_role.php
Normal file
18
db/migrations/004_add_superadmin_role.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../config.php';
|
||||
|
||||
try {
|
||||
$pdo = db();
|
||||
// Add is_superadmin column to users table
|
||||
$sql = "ALTER TABLE `users` ADD `is_superadmin` TINYINT(1) NOT NULL DEFAULT 0;";
|
||||
$pdo->exec($sql);
|
||||
echo "Migration 004 successful: Added 'is_superadmin' to 'users' table.\n";
|
||||
} catch (PDOException $e) {
|
||||
// Check if column already exists
|
||||
if (strpos($e->getMessage(), 'Duplicate column name') !== false) {
|
||||
echo "Migration 004 warning: Column 'is_superadmin' already exists in 'users' table.\n";
|
||||
} else {
|
||||
die("Migration 004 failed: " . $e->getMessage() . "\n");
|
||||
}
|
||||
}
|
||||
|
||||
143
download_payslip.php
Normal file
143
download_payslip.php
Normal file
@ -0,0 +1,143 @@
|
||||
<?php
|
||||
ini_set('display_errors', 1);
|
||||
error_reporting(E_ALL);
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id'])) {
|
||||
http_response_code(403);
|
||||
die('Access denied');
|
||||
}
|
||||
|
||||
if (!isset($_GET['payslip_id'])) {
|
||||
http_response_code(400);
|
||||
die('Payslip ID is required');
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$payslip_id = $_GET['payslip_id'];
|
||||
|
||||
// Fetch data
|
||||
try {
|
||||
$pdo = db();
|
||||
// Fetch Payslip, Employee, Company, and Run info
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT ps.*, pr.pay_period_month, pr.pay_period_year, e.first_name, e.last_name, e.position, c.name as company_name
|
||||
FROM payslips ps
|
||||
JOIN payroll_runs pr ON ps.payroll_run_id = pr.id
|
||||
JOIN employees e ON ps.employee_id = e.id
|
||||
JOIN companies c ON pr.company_id = c.id
|
||||
WHERE ps.id = ? AND c.id = ?"
|
||||
);
|
||||
$stmt->execute([$payslip_id, $company_id]);
|
||||
$payslip = $stmt->fetch();
|
||||
|
||||
if (!$payslip) {
|
||||
http_response_code(404);
|
||||
die('Payslip not found or access denied.');
|
||||
}
|
||||
|
||||
// Fetch Payslip Items
|
||||
$stmt = $pdo->prepare("SELECT * FROM payslip_items WHERE payslip_id = ? ORDER BY type, description");
|
||||
$stmt->execute([$payslip_id]);
|
||||
$items = $stmt->fetchAll();
|
||||
|
||||
} catch (Exception $e) {
|
||||
http_response_code(500);
|
||||
die('Database error: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
// PDF Generation
|
||||
class MYPDF extends TCPDF {
|
||||
public function Header() {
|
||||
$this->SetFont('helvetica', 'B', 20);
|
||||
$this->Cell(0, 15, 'Payslip', 0, false, 'C', 0, '', 0, false, 'M', 'M');
|
||||
}
|
||||
public function Footer() {
|
||||
$this->SetY(-15);
|
||||
$this->SetFont('helvetica', 'I', 8);
|
||||
$this->Cell(0, 10, 'Page '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, false, 'C', 0, '', 0, false, 'T', 'M');
|
||||
}
|
||||
}
|
||||
|
||||
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
|
||||
|
||||
$pdf->SetCreator(PDF_CREATOR);
|
||||
$pdf->SetAuthor('GPTPayroll');
|
||||
$pdf->SetTitle('Payslip');
|
||||
$pdf->SetSubject('Payslip');
|
||||
|
||||
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
|
||||
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
|
||||
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
|
||||
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
|
||||
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
|
||||
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
|
||||
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
|
||||
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
|
||||
|
||||
$pdf->AddPage();
|
||||
|
||||
$pdf->SetFont('helvetica', '', 10);
|
||||
|
||||
// --- Company & Employee Details ---
|
||||
$html = '
|
||||
<table cellpadding="5" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td>
|
||||
<b>' . htmlspecialchars($payslip['company_name']) . '</b><br>
|
||||
Pay Period: ' . htmlspecialchars(date('F Y', mktime(0,0,0, (int)$payslip['pay_period_month'], 1, (int)$payslip['pay_period_year']))) . '<br>
|
||||
</td>
|
||||
<td align="right">
|
||||
<b>Employee:</b> ' . htmlspecialchars($payslip['first_name'] . ' ' . $payslip['last_name']) . '<br>
|
||||
<b>Position:</b> ' . htmlspecialchars($payslip['position']) . '<br>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr>';
|
||||
|
||||
$pdf->writeHTML($html, true, false, true, false, '');
|
||||
|
||||
// --- Earnings, Deductions, Summary ---
|
||||
$earnings = array_filter($items, function($i) { return $i['type'] == 'earning'; });
|
||||
$deductions = array_filter($items, function($i) { return $i['type'] == 'deduction' || $i['type'] == 'tax'; });
|
||||
|
||||
$html = '
|
||||
<table cellpadding="5" cellspacing="0" border="0" width="100%">
|
||||
<tr>
|
||||
<td width="50%" valign="top">
|
||||
<b style="font-size: 12px;">Earnings</b><br>
|
||||
<table cellpadding="2">
|
||||
' . implode('', array_map(function($item) {
|
||||
return '<tr><td>' . htmlspecialchars($item['description']) . '</td><td align="right">' . number_format((float)$item['amount'], 2) . '</td></tr>';
|
||||
}, $earnings)) . '
|
||||
</table>
|
||||
</td>
|
||||
<td width="50%" valign="top">
|
||||
<b style="font-size: 12px;">Deductions</b><br>
|
||||
<table cellpadding="2">
|
||||
' . implode('', array_map(function($item) {
|
||||
return '<tr><td>' . htmlspecialchars($item['description']) . '</td><td align="right">' . number_format((float)$item['amount'], 2) . '</td></tr>';
|
||||
}, $deductions)) . '
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<br><br>';
|
||||
$pdf->writeHTML($html, true, false, true, false, '');
|
||||
|
||||
// --- Summary ---
|
||||
$html = '
|
||||
<table cellpadding="5" cellspacing="0" border="1" width="100%" style="background-color:#f0f0f0;">
|
||||
<tr>
|
||||
<td width="33.3%"><b>Gross Pay:</b><br>ZMW ' . number_format((float)$payslip['gross_pay'], 2) . '</td>
|
||||
<td width="33.3%"><b>Total Deductions:</b><br>ZMW ' . number_format((float)$payslip['total_deductions'], 2) . '</td>
|
||||
<td width="33.3%"><b>Net Pay:</b><br><b>ZMW ' . number_format((float)$payslip['net_pay'], 2) . '</b></td>
|
||||
</tr>
|
||||
</table>';
|
||||
|
||||
$pdf->writeHTML($html, true, false, true, false, '');
|
||||
|
||||
// --- Output ---
|
||||
$pdf->Output('payslip_' . $payslip_id . '.pdf', 'I');
|
||||
155
edit_employee.php
Normal file
155
edit_employee.php
Normal file
@ -0,0 +1,155 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id'])) {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$employee_id = $_GET['id'] ?? null;
|
||||
$error_message = '';
|
||||
$success_message = '';
|
||||
|
||||
if (!$employee_id) {
|
||||
header('Location: /employees.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Fetch employee data
|
||||
$stmt = db()->prepare("SELECT e.*, u.email FROM employees e JOIN users u ON e.user_id = u.id WHERE e.id = ? AND e.company_id = ?");
|
||||
$stmt->execute([$employee_id, $company_id]);
|
||||
$employee = $stmt->fetch();
|
||||
|
||||
if (!$employee) {
|
||||
header('Location: /employees.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Handle Update Employee
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_employee'])) {
|
||||
$first_name = $_POST['first_name'] ?? '';
|
||||
$last_name = $_POST['last_name'] ?? '';
|
||||
$position = $_POST['position'] ?? '';
|
||||
$basic_salary = $_POST['basic_salary'] ?? 0;
|
||||
|
||||
if (empty($first_name) || empty($last_name) || empty($position) || empty($basic_salary)) {
|
||||
$error_message = 'All fields are required.';
|
||||
} else {
|
||||
try {
|
||||
$stmt = db()->prepare(
|
||||
"UPDATE employees SET first_name = ?, last_name = ?, position = ?, basic_salary = ? WHERE id = ? AND company_id = ?"
|
||||
);
|
||||
$stmt->execute([$first_name, $last_name, $position, $basic_salary, $employee_id, $company_id]);
|
||||
$success_message = 'Employee updated successfully!';
|
||||
|
||||
// Refresh employee data after update
|
||||
$stmt = db()->prepare("SELECT * FROM employees WHERE id = ? AND company_id = ?");
|
||||
$stmt->execute([$employee_id, $company_id]);
|
||||
$employee = $stmt->fetch();
|
||||
|
||||
} catch (Exception $e) {
|
||||
$error_message = "Failed to update employee: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Edit Employee - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
|
||||
<!-- Messages -->
|
||||
<?php if ($error_message): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($success_message): ?>
|
||||
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($success_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Edit Employee Form -->
|
||||
<div class="bg-white shadow-md rounded p-8 mb-8">
|
||||
<h2 class="text-2xl font-bold text-gray-800 mb-4">Edit Employee</h2>
|
||||
<form action="/edit_employee.php?id=<?= htmlspecialchars($employee_id) ?>" method="POST">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div>
|
||||
<label for="first_name" class="block text-gray-700 text-sm font-bold mb-2">First Name</label>
|
||||
<input type="text" name="first_name" id="first_name" value="<?= htmlspecialchars($employee['first_name']) ?>" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="last_name" class="block text-gray-700 text-sm font-bold mb-2">Last Name</label>
|
||||
<input type="text" name="last_name" id="last_name" value="<?= htmlspecialchars($employee['last_name']) ?>" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="email" class="block text-gray-700 text-sm font-bold mb-2">Email</label>
|
||||
<input type="email" name="email" id="email" value="<?= htmlspecialchars($employee['email'] ?? '') ?>" readonly disabled class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 bg-gray-200">
|
||||
<p class="text-xs text-gray-500 mt-1">Email cannot be changed.</p>
|
||||
</div>
|
||||
<div>
|
||||
<label for="position" class="block text-gray-700 text-sm font-bold mb-2">Position</label>
|
||||
<input type="text" name="position" id="position" value="<?= htmlspecialchars($employee['position']) ?>" required class="shadow appearance-none border rounded w-full py-.2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="basic_salary" class="block text-gray-700 text-sm font-bold mb-2">Basic Salary (ZMW)</label>
|
||||
<input type="number" step="0.01" name="basic_salary" id="basic_salary" value="<?= htmlspecialchars($employee['basic_salary']) ?>" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-6">
|
||||
<button type="submit" name="update_employee" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Update Employee
|
||||
</button>
|
||||
<a href="/employees.php" class="inline-block align-baseline font-bold text-sm text-blue-500 hover:text-blue-800 ml-4">
|
||||
Cancel
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/employees.php" class="block py-4 px-4 text-white font-bold no-underline">Employees</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll_history.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll History</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
234
employees.php
Normal file
234
employees.php
Normal file
@ -0,0 +1,234 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id'])) {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$error_message = '';
|
||||
$success_message = '';
|
||||
|
||||
// Handle Delete Employee
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['delete_employee'])) {
|
||||
$employee_id = $_POST['employee_id'] ?? null;
|
||||
$user_id = $_POST['user_id'] ?? null;
|
||||
|
||||
if ($employee_id && $user_id) {
|
||||
try {
|
||||
$pdo = db();
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// 1. Delete the employee record
|
||||
$stmt = $pdo->prepare("DELETE FROM employees WHERE id = ? AND company_id = ?");
|
||||
$stmt->execute([$employee_id, $company_id]);
|
||||
|
||||
// 2. Delete the user record
|
||||
$stmt = $pdo->prepare("DELETE FROM users WHERE id = ? AND company_id = ?");
|
||||
$stmt->execute([$user_id, $company_id]);
|
||||
|
||||
$pdo->commit();
|
||||
$success_message = 'Employee deleted successfully!';
|
||||
} catch (Exception $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
$error_message = "Failed to delete employee: " . $e->getMessage();
|
||||
}
|
||||
} else {
|
||||
$error_message = 'Invalid employee data for deletion.';
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Add Employee
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['add_employee'])) {
|
||||
$first_name = $_POST['first_name'] ?? '';
|
||||
$last_name = $_POST['last_name'] ?? '';
|
||||
$email = $_POST['email'] ?? '';
|
||||
$position = $_POST['position'] ?? '';
|
||||
$basic_salary = $_POST['basic_salary'] ?? 0;
|
||||
$password = $_POST['password'] ?? 'password123'; // Default password, should be changed by user
|
||||
|
||||
if (empty($first_name) || empty($last_name) || empty($email) || empty($position) || empty($basic_salary)) {
|
||||
$error_message = 'All fields are required to add an employee.';
|
||||
} else {
|
||||
try {
|
||||
$pdo = db();
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// Check if email exists
|
||||
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
|
||||
$stmt->execute([$email]);
|
||||
if ($stmt->fetch()) {
|
||||
throw new Exception("A user with this email already exists.");
|
||||
}
|
||||
|
||||
// 1. Create a user record for the employee
|
||||
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
|
||||
$stmt = $pdo->prepare("INSERT INTO users (company_id, email, password, role) VALUES (?, ?, ?, 'employee')");
|
||||
$stmt->execute([$company_id, $email, $hashed_password]);
|
||||
$user_id = $pdo->lastInsertId();
|
||||
|
||||
// 2. Create the employee record
|
||||
$stmt = $pdo->prepare(
|
||||
"INSERT INTO employees (user_id, company_id, first_name, last_name, position, basic_salary) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
$stmt->execute([$user_id, $company_id, $first_name, $last_name, $position, $basic_salary]);
|
||||
|
||||
$pdo->commit();
|
||||
$success_message = 'Employee added successfully!';
|
||||
|
||||
} catch (Exception $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
$error_message = "Failed to add employee: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch employees for the company
|
||||
$stmt = db()->prepare("SELECT e.*, u.email FROM employees e JOIN users u ON e.user_id = u.id WHERE e.company_id = ? ORDER BY e.created_at DESC");
|
||||
$stmt->execute([$company_id]);
|
||||
$employees = $stmt->fetchAll();
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Manage Employees - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
|
||||
<!-- Messages -->
|
||||
<?php if ($error_message): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($success_message): ?>
|
||||
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($success_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Add Employee Form -->
|
||||
<div class="bg-white shadow-md rounded p-8 mb-8">
|
||||
<h2 class="text-2xl font-bold text-gray-800 mb-4">Add New Employee</h2>
|
||||
<form action="/employees.php" method="POST">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||||
<div>
|
||||
<label for="first_name" class="block text-gray-700 text-sm font-bold mb-2">First Name</label>
|
||||
<input type="text" name="first_name" id="first_name" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="last_name" class="block text-gray-700 text-sm font-bold mb-2">Last Name</label>
|
||||
<input type="text" name="last_name" id="last_name" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="email" class="block text-gray-700 text-sm font-bold mb-2">Email</label>
|
||||
<input type="email" name="email" id="email" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="position" class="block text-gray-700 text-sm font-bold mb-2">Position</label>
|
||||
<input type="text" name="position" id="position" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
<div>
|
||||
<label for="basic_salary" class="block text-gray-700 text-sm font-bold mb-2">Basic Salary (ZMW)</label>
|
||||
<input type="number" step="0.01" name="basic_salary" id="basic_salary" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-6">
|
||||
<button type="submit" name="add_employee" class="bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Add Employee
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Employee List -->
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h2 class="text-2xl font-bold text-gray-800 mb-4">Employee Roster</h2>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-gray-200">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Name</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Email</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Position</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Salary</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Hire Date</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="bg-white divide-y divide-gray-200">
|
||||
<?php if (empty($employees)): ?>
|
||||
<tr>
|
||||
<td colspan="5" class="px-6 py-4 whitespace-nowrap text-sm text-gray-500 text-center">No employees found.</td>
|
||||
</tr>
|
||||
<?php else: ?>
|
||||
<?php foreach ($employees as $employee): ?>
|
||||
<tr>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900"><?= htmlspecialchars($employee['first_name'] . ' ' . $employee['last_name']) ?></td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"><?= htmlspecialchars($employee['email']) ?></td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"><?= htmlspecialchars($employee['position']) ?></td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">ZMW <?= htmlspecialchars(number_format((float)$employee['basic_salary'], 2)) ?></td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"><?= htmlspecialchars(date('d M Y', strtotime($employee['hire_date'] ?? $employee['created_at']))) ?></td>
|
||||
<td class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium">
|
||||
<a href="edit_employee.php?id=<?= $employee['id'] ?>" class="text-indigo-600 hover:text-indigo-900">Edit</a>
|
||||
<form action="/employees.php" method="POST" class="inline-block" onsubmit="return confirm('Are you sure you want to delete this employee?');">
|
||||
<input type="hidden" name="employee_id" value="<?= $employee['id'] ?>">
|
||||
<input type="hidden" name="user_id" value="<?= $employee['user_id'] ?>">
|
||||
<button type="submit" name="delete_employee" class="text-red-600 hover:text-red-900 ml-4">Delete</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/employees.php" class="block py-4 px-4 text-white font-bold no-underline">Employees</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll_history.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll History</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
82
includes/payroll_engine.php
Normal file
82
includes/payroll_engine.php
Normal file
@ -0,0 +1,82 @@
|
||||
<?php
|
||||
|
||||
function calculate_payroll(float $basic_salary, array $settings): array
|
||||
{
|
||||
$result = [
|
||||
'gross_pay' => $basic_salary,
|
||||
'items' => [],
|
||||
'deductions' => [],
|
||||
'taxes' => [],
|
||||
'net_pay' => 0,
|
||||
];
|
||||
|
||||
// Add Basic Salary as an earning item
|
||||
$result['items'][] = ['type' => 'earning', 'description' => 'Basic Salary', 'amount' => $basic_salary];
|
||||
|
||||
// --- Deductions ---
|
||||
|
||||
// 1. NAPSA Calculation
|
||||
$napsa_rate = (float)($settings['napsa_rate'] ?? 5) / 100;
|
||||
$napsa_ceiling = (float)($settings['napsa_ceiling'] ?? 2880);
|
||||
$assessable_for_napsa = min($basic_salary, $napsa_ceiling);
|
||||
$napsa_contribution = $assessable_for_napsa * $napsa_rate;
|
||||
$result['deductions']['napsa'] = $napsa_contribution;
|
||||
$result['items'][] = ['type' => 'deduction', 'description' => 'NAPSA', 'amount' => $napsa_contribution];
|
||||
|
||||
// 2. NHIMA Calculation
|
||||
$nhima_rate = (float)($settings['nhima_rate'] ?? 1) / 100;
|
||||
$nhima_contribution = $basic_salary * $nhima_rate;
|
||||
$result['deductions']['nhima'] = $nhima_contribution;
|
||||
$result['items'][] = ['type' => 'deduction', 'description' => 'NHIMA', 'amount' => $nhima_contribution];
|
||||
|
||||
// --- Taxable Income ---
|
||||
$taxable_income = $basic_salary - $napsa_contribution;
|
||||
|
||||
// --- PAYE Calculation ---
|
||||
$paye_brackets = json_decode($settings['paye_brackets'] ?? '[]', true);
|
||||
$paye_tax = 0;
|
||||
$remaining_income = $taxable_income;
|
||||
|
||||
// Sort brackets by 'from' value to ensure correct order
|
||||
usort($paye_brackets, function($a, $b) {
|
||||
return $a['from'] <=> $b['from'];
|
||||
});
|
||||
|
||||
$cumulative_tax = 0;
|
||||
$income_in_previous_bands = 0;
|
||||
|
||||
foreach ($paye_brackets as $bracket) {
|
||||
$from = (float)$bracket['from'];
|
||||
$to = isset($bracket['to']) ? (float)$bracket['to'] : null;
|
||||
$rate = (float)$bracket['rate'] / 100;
|
||||
|
||||
if ($taxable_income > $from) {
|
||||
$taxable_in_this_band = 0;
|
||||
if ($to === null) { // Top bracket
|
||||
$taxable_in_this_band = $taxable_income - $from;
|
||||
} else {
|
||||
$taxable_in_this_band = min($taxable_income, $to) - $from;
|
||||
}
|
||||
|
||||
if ($taxable_in_this_band > 0) {
|
||||
$cumulative_tax += $taxable_in_this_band * $rate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$paye_tax = $cumulative_tax;
|
||||
|
||||
if ($paye_tax > 0) {
|
||||
$result['taxes']['paye'] = $paye_tax;
|
||||
$result['items'][] = ['type' => 'tax', 'description' => 'PAYE', 'amount' => $paye_tax];
|
||||
}
|
||||
|
||||
// --- Final Calculations ---
|
||||
$total_deductions = array_sum($result['deductions']) + array_sum($result['taxes']);
|
||||
$net_pay = $basic_salary - $total_deductions;
|
||||
|
||||
$result['total_deductions'] = $total_deductions;
|
||||
$result['net_pay'] = $net_pay;
|
||||
|
||||
return $result;
|
||||
}
|
||||
237
index.php
237
index.php
@ -1,150 +1,95 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
@ini_set('display_errors', '1');
|
||||
@error_reporting(E_ALL);
|
||||
@date_default_timezone_set('UTC');
|
||||
|
||||
$phpVersion = PHP_VERSION;
|
||||
$now = date('Y-m-d H:i:s');
|
||||
?>
|
||||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>New Style</title>
|
||||
<?php
|
||||
// Read project preview data from environment
|
||||
$projectDescription = $_SERVER['PROJECT_DESCRIPTION'] ?? '';
|
||||
$projectImageUrl = $_SERVER['PROJECT_IMAGE_URL'] ?? '';
|
||||
?>
|
||||
<?php if ($projectDescription): ?>
|
||||
<!-- Meta description -->
|
||||
<meta name="description" content='<?= htmlspecialchars($projectDescription) ?>' />
|
||||
<!-- Open Graph meta tags -->
|
||||
<meta property="og:description" content="<?= htmlspecialchars($projectDescription) ?>" />
|
||||
<!-- Twitter meta tags -->
|
||||
<meta property="twitter:description" content="<?= htmlspecialchars($projectDescription) ?>" />
|
||||
<?php endif; ?>
|
||||
<?php if ($projectImageUrl): ?>
|
||||
<!-- Open Graph image -->
|
||||
<meta property="og:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
|
||||
<!-- Twitter image -->
|
||||
<meta property="twitter:image" content="<?= htmlspecialchars($projectImageUrl) ?>" />
|
||||
<?php endif; ?>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg-color-start: #6a11cb;
|
||||
--bg-color-end: #2575fc;
|
||||
--text-color: #ffffff;
|
||||
--card-bg-color: rgba(255, 255, 255, 0.01);
|
||||
--card-border-color: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
background: linear-gradient(45deg, var(--bg-color-start), var(--bg-color-end));
|
||||
color: var(--text-color);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-height: 100vh;
|
||||
text-align: center;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
body::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100" viewBox="0 0 100 100"><path d="M-10 10L110 10M10 -10L10 110" stroke-width="1" stroke="rgba(255,255,255,0.05)"/></svg>');
|
||||
animation: bg-pan 20s linear infinite;
|
||||
z-index: -1;
|
||||
}
|
||||
@keyframes bg-pan {
|
||||
0% { background-position: 0% 0%; }
|
||||
100% { background-position: 100% 100%; }
|
||||
}
|
||||
main {
|
||||
padding: 2rem;
|
||||
}
|
||||
.card {
|
||||
background: var(--card-bg-color);
|
||||
border: 1px solid var(--card-border-color);
|
||||
border-radius: 16px;
|
||||
padding: 2rem;
|
||||
backdrop-filter: blur(20px);
|
||||
-webkit-backdrop-filter: blur(20px);
|
||||
box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.loader {
|
||||
margin: 1.25rem auto 1.25rem;
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
border: 3px solid rgba(255, 255, 255, 0.25);
|
||||
border-top-color: #fff;
|
||||
border-radius: 50%;
|
||||
animation: spin 1s linear infinite;
|
||||
}
|
||||
@keyframes spin {
|
||||
from { transform: rotate(0deg); }
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
.hint {
|
||||
opacity: 0.9;
|
||||
}
|
||||
.sr-only {
|
||||
position: absolute;
|
||||
width: 1px; height: 1px;
|
||||
padding: 0; margin: -1px;
|
||||
overflow: hidden;
|
||||
clip: rect(0, 0, 0, 0);
|
||||
white-space: nowrap; border: 0;
|
||||
}
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
font-weight: 700;
|
||||
margin: 0 0 1rem;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
p {
|
||||
margin: 0.5rem 0;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
code {
|
||||
background: rgba(0,0,0,0.2);
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
||||
}
|
||||
footer {
|
||||
position: absolute;
|
||||
bottom: 1rem;
|
||||
font-size: 0.8rem;
|
||||
opacity: 0.7;
|
||||
}
|
||||
</style>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>GPTPayroll & HR SaaS</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<style>
|
||||
.zambian-gradient {
|
||||
background: linear-gradient(45deg, #10B981, #F59E0B, #EF4444);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<main>
|
||||
<div class="card">
|
||||
<h1>Analyzing your requirements and generating your website…</h1>
|
||||
<div class="loader" role="status" aria-live="polite" aria-label="Applying initial changes">
|
||||
<span class="sr-only">Loading…</span>
|
||||
</div>
|
||||
<p class="hint"><?= ($_SERVER['HTTP_HOST'] ?? '') === 'appwizzy.com' ? 'AppWizzy' : 'Flatlogic' ?> AI is collecting your requirements and applying the first changes.</p>
|
||||
<p class="hint">This page will update automatically as the plan is implemented.</p>
|
||||
<p>Runtime: PHP <code><?= htmlspecialchars($phpVersion) ?></code> — UTC <code><?= htmlspecialchars($now) ?></code></p>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
Page updated: <?= htmlspecialchars($now) ?> (UTC)
|
||||
</footer>
|
||||
<body class="bg-gray-100">
|
||||
|
||||
<!-- Navigation -->
|
||||
<nav class="bg-white shadow-md">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="flex justify-between items-center h-16">
|
||||
<div class="flex-shrink-0">
|
||||
<a href="#" class="text-2xl font-bold zambian-gradient bg-clip-text text-transparent">GPTPayroll</a>
|
||||
</div>
|
||||
<div class="hidden md:block">
|
||||
<div class="ml-10 flex items-baseline space-x-4">
|
||||
<a href="#" class="text-gray-700 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Home</a>
|
||||
<a href="#features" class="text-gray-700 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Features</a>
|
||||
<a href="#pricing" class="text-gray-700 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Pricing</a>
|
||||
<a href="/login.php" class="text-gray-700 hover:text-gray-900 px-3 py-2 rounded-md text-sm font-medium">Login</a>
|
||||
<a href="/register.php" class="bg-green-500 text-white px-3 py-2 rounded-md text-sm font-medium hover:bg-green-600">Register</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<!-- Hero Section -->
|
||||
<header class="zambian-gradient text-white text-center py-20">
|
||||
<h1 class="text-5xl font-bold mb-4">Modern Payroll & HR for Zambia</h1>
|
||||
<p class="text-xl mb-8">Automate your payroll, taxes, and HR with a system built for Zambia.</p>
|
||||
<a href="/register.php" class="bg-white text-green-500 font-bold py-3 px-6 rounded-full hover:bg-gray-200">Get Started for Free</a>
|
||||
</header>
|
||||
|
||||
<!-- Features Section -->
|
||||
<main id="features" class="py-20">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
|
||||
<div class="text-center mb-12">
|
||||
<h2 class="text-3xl font-bold text-gray-800">All-in-One HR Platform</h2>
|
||||
<p class="text-gray-600">Everything you need to manage your workforce.</p>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-8">
|
||||
<div class="bg-white p-8 rounded-lg shadow-md">
|
||||
<h3 class="text-xl font-bold mb-2">Payroll Management</h3>
|
||||
<p class="text-gray-600">Automated calculations for NAPSA, NHIMA, and PAYE. Customizable payslips.</p>
|
||||
</div>
|
||||
<div class="bg-white p-8 rounded-lg shadow-md">
|
||||
<h3 class="text-xl font-bold mb-2">Employee Self-Service</h3>
|
||||
<p class="text-gray-600">Employees can view payslips, apply for leave, and update their information.</p>
|
||||
</div>
|
||||
<div class="bg-white p-8 rounded-lg shadow-md">
|
||||
<h3 class="text-xl font-bold mb-2">Compliance & Reporting</h3>
|
||||
<p class="text-gray-600">Generate tax reports and stay compliant with Zambian regulations.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- Pricing Section -->
|
||||
<section id="pricing" class="bg-gray-50 py-20">
|
||||
<div class="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<h2 class="text-3xl font-bold text-gray-800 mb-4">Simple, Transparent Pricing</h2>
|
||||
<p class="text-gray-600 mb-8">Choose the plan that's right for your business.</p>
|
||||
<div class="bg-white p-8 rounded-lg shadow-md">
|
||||
<h3 class="text-2xl font-bold mb-4">Business Plan</h3>
|
||||
<p class="text-5xl font-bold mb-4">K 100 <span class="text-lg font-normal">/ employee / month</span></p>
|
||||
<ul class="text-left space-y-2 text-gray-600">
|
||||
<li><span class="text-green-500 mr-2">✓</span>Full Payroll & HR Suite</li>
|
||||
<li><span class="text-green-500 mr-2">✓</span>Employee Self-Service</li>
|
||||
<li><span class="text-green-500 mr-2">✓</span>Standard Integrations</li>
|
||||
<li><span class="text-green-500 mr-2">✓</span>Email & Phone Support</li>
|
||||
</ul>
|
||||
<a href="/register.php" class="mt-8 inline-block bg-green-500 text-white font-bold py-3 px-6 rounded-full hover:bg-green-600">Start 14-day Free Trial</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
|
||||
<!-- Footer -->
|
||||
<footer class="bg-gray-800 text-white py-8">
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 text-center">
|
||||
<p>© 2025 GPTPayroll. All rights reserved.</p>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
89
login.php
Normal file
89
login.php
Normal file
@ -0,0 +1,89 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
$error_message = '';
|
||||
|
||||
if (isset($_GET['registration']) && $_GET['registration'] === 'success') {
|
||||
$success_message = 'Registration successful! Please log in.';
|
||||
}
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$email = $_POST['email'] ?? '';
|
||||
$password = $_POST['password'] ?? '';
|
||||
|
||||
if (empty($email) || empty($password)) {
|
||||
$error_message = 'Email and password are required.';
|
||||
} else {
|
||||
try {
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = ?");
|
||||
$stmt->execute([$email]);
|
||||
$user = $stmt->fetch();
|
||||
|
||||
if ($user && password_verify($password, $user['password'])) {
|
||||
$_SESSION['user_id'] = $user['id'];
|
||||
$_SESSION['company_id'] = $user['company_id'];
|
||||
$_SESSION['role'] = $user['role'];
|
||||
|
||||
header('Location: /dashboard.php');
|
||||
exit;
|
||||
} else {
|
||||
$error_message = 'Invalid email or password.';
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
$error_message = "Login failed: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Login - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 flex items-center justify-center min-h-screen">
|
||||
|
||||
<div class="w-full max-w-md bg-white p-8 rounded-lg shadow-md">
|
||||
<div class="text-center mb-8">
|
||||
<a href="/" class="text-3xl font-bold bg-clip-text text-transparent" style="background: linear-gradient(45deg, #10B981, #F59E0B, #EF4444);">GPTPayroll</a>
|
||||
<h2 class="mt-2 text-2xl font-bold text-gray-800">Log in to your account</h2>
|
||||
</div>
|
||||
|
||||
<?php if (!empty($error_message)): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php if (!empty($success_message)): ?>
|
||||
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($success_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="/login.php" method="POST">
|
||||
<div class="mb-4">
|
||||
<label for="email" class="block text-gray-700 text-sm font-bold mb-2">Email Address</label>
|
||||
<input type="email" id="email" name="email" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="password" class="block text-gray-700 text-sm font-bold mb-2">Password</label>
|
||||
<input type="password" id="password" name="password" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline">
|
||||
</div>
|
||||
<div class="flex items-center justify-between">
|
||||
<button type="submit" class="w-full bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Log In
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<p class="text-center text-gray-500 text-xs mt-6">
|
||||
Don't have an account? <a href="/register.php" class="text-green-500 hover:text-green-700">Register here</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
6
logout.php
Normal file
6
logout.php
Normal file
@ -0,0 +1,6 @@
|
||||
<?php
|
||||
session_start();
|
||||
session_unset();
|
||||
session_destroy();
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
214
payroll.php
Normal file
214
payroll.php
Normal file
@ -0,0 +1,214 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
require_once __DIR__ . '/includes/payroll_engine.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id']) || $_SESSION['role'] !== 'admin') {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$error_message = '';
|
||||
$success_message = '';
|
||||
$payroll_results = [];
|
||||
|
||||
// Default to current month and year
|
||||
$pay_period_month = $_POST['pay_period_month'] ?? date('m');
|
||||
$pay_period_year = $_POST['pay_period_year'] ?? date('Y');
|
||||
|
||||
// Handle Run Payroll
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['run_payroll'])) {
|
||||
try {
|
||||
$pdo = db();
|
||||
|
||||
// 1. Fetch settings
|
||||
$stmt = $pdo->prepare("SELECT setting_key, setting_value FROM settings WHERE company_id = ?");
|
||||
$stmt->execute([$company_id]);
|
||||
$settings_raw = $stmt->fetchAll();
|
||||
$settings = [];
|
||||
foreach ($settings_raw as $row) {
|
||||
$settings[$row['setting_key']] = $row['setting_value'];
|
||||
}
|
||||
|
||||
// 2. Fetch employees
|
||||
$stmt = $pdo->prepare("SELECT * FROM employees WHERE company_id = ?");
|
||||
$stmt->execute([$company_id]);
|
||||
$employees = $stmt->fetchAll();
|
||||
|
||||
if (empty($employees)) {
|
||||
throw new Exception("No employees found for this company.");
|
||||
}
|
||||
|
||||
// 3. Calculate payroll for each employee
|
||||
foreach ($employees as $employee) {
|
||||
$payroll_data = calculate_payroll((float)$employee['basic_salary'], $settings);
|
||||
$payroll_results[] = [
|
||||
'employee' => $employee,
|
||||
'payroll' => $payroll_data,
|
||||
];
|
||||
}
|
||||
$success_message = "Payroll calculated for " . count($employees) . " employees.";
|
||||
|
||||
} catch (Exception $e) {
|
||||
$error_message = "Error calculating payroll: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Handle Save Payroll
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['save_payroll'])) {
|
||||
$results_json = $_POST['payroll_results_json'] ?? '[]';
|
||||
$results_to_save = json_decode($results_json, true);
|
||||
|
||||
if (empty($results_to_save)) {
|
||||
$error_message = "No payroll data to save.";
|
||||
} else {
|
||||
try {
|
||||
$pdo = db();
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// 1. Create payroll run record
|
||||
$stmt = $pdo->prepare("INSERT INTO payroll_runs (company_id, pay_period_month, pay_period_year, status) VALUES (?, ?, ?, 'completed') ON DUPLICATE KEY UPDATE status='completed'");
|
||||
$stmt->execute([$company_id, $pay_period_month, $pay_period_year]);
|
||||
$run_id = $pdo->lastInsertId();
|
||||
// If the run already existed, get its ID
|
||||
if ($run_id == 0) {
|
||||
$stmt = $pdo->prepare("SELECT id FROM payroll_runs WHERE company_id = ? AND pay_period_year = ? AND pay_period_month = ?");
|
||||
$stmt->execute([$company_id, $pay_period_year, $pay_period_month]);
|
||||
$run_id = $stmt->fetchColumn();
|
||||
}
|
||||
|
||||
// 2. Save each payslip
|
||||
foreach ($results_to_save as $result) {
|
||||
$employee_id = $result['employee']['id'];
|
||||
$payroll = $result['payroll'];
|
||||
|
||||
$stmt = $pdo->prepare("INSERT INTO payslips (payroll_run_id, employee_id, gross_pay, total_deductions, net_pay) VALUES (?, ?, ?, ?, ?)");
|
||||
$stmt->execute([$run_id, $employee_id, $payroll['gross_pay'], $payroll['total_deductions'], $payroll['net_pay']]);
|
||||
$payslip_id = $pdo->lastInsertId();
|
||||
|
||||
// 3. Save payslip items
|
||||
foreach ($payroll['items'] as $item) {
|
||||
$stmt = $pdo->prepare("INSERT INTO payslip_items (payslip_id, type, description, amount) VALUES (?, ?, ?, ?)");
|
||||
$stmt->execute([$payslip_id, $item['type'], $item['description'], $item['amount']]);
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
$success_message = "Payroll run for {$pay_period_month}/{$pay_period_year} has been saved successfully!";
|
||||
$payroll_results = []; // Clear results from view after saving
|
||||
|
||||
} catch (Exception $e) {
|
||||
if ($pdo->inTransaction()) $pdo->rollBack();
|
||||
$error_message = "Failed to save payroll run: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Run Payroll - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
|
||||
<?php if ($error_message): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert"><span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span></div>
|
||||
<?php endif; ?>
|
||||
<?php if ($success_message): ?>
|
||||
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert"><span class="block sm:inline"><?= htmlspecialchars($success_message) ?></span></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- Payroll Run Form -->
|
||||
<div class="bg-white shadow-md rounded p-8 mb-8">
|
||||
<h2 class="text-2xl font-bold text-gray-800 mb-4">Run Payroll</h2>
|
||||
<form action="/payroll.php" method="POST" class="flex items-end space-x-4">
|
||||
<div>
|
||||
<label for="pay_period_month" class="block text-gray-700 text-sm font-bold mb-2">Pay Period</label>
|
||||
<select name="pay_period_month" id="pay_period_month" class="shadow border rounded py-2 px-3 text-gray-700">
|
||||
<?php for ($i = 1; $i <= 12; $i++): ?>
|
||||
<option value="<?= str_pad((string)$i, 2, '0', STR_PAD_LEFT) ?>" <?= ($pay_period_month == $i) ? 'selected' : '' ?>><?= date('F', mktime(0, 0, 0, $i, 10)) ?></option>
|
||||
<?php endfor; ?>
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<select name="pay_period_year" id="pay_period_year" class="shadow border rounded py-2 px-3 text-gray-700">
|
||||
<?php for ($i = date('Y'); $i >= date('Y') - 5; $i--): ?>
|
||||
<option value="<?= $i ?>" <?= ($pay_period_year == $i) ? 'selected' : '' ?>><?= $i ?></option>
|
||||
<?php endfor; ?>
|
||||
</select>
|
||||
</div>
|
||||
<button type="submit" name="run_payroll" class="bg-blue-500 hover:bg-blue-600 text-white font-bold py-2 px-4 rounded">Calculate Payroll</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!-- Payroll Results -->
|
||||
<?php if (!empty($payroll_results)): ?>
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h2 class="text-2xl font-bold text-gray-800 mb-4">Payroll Preview for <?= htmlspecialchars(date('F Y', mktime(0,0,0,(int)$pay_period_month,1,(int)$pay_period_year))) ?></h2>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-gray-200">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Employee</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Gross Pay</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">NAPSA</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">NHIMA</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">PAYE</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Total Deductions</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Net Pay</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="bg-white divide-y divide-gray-200">
|
||||
<?php foreach ($payroll_results as $result): ?>
|
||||
<tr>
|
||||
<td class="px-6 py-4 text-sm font-medium text-gray-900"><?= htmlspecialchars($result['employee']['first_name'] . ' ' . $result['employee']['last_name']) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right">ZMW <?= number_format($result['payroll']['gross_pay'], 2) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right">ZMW <?= number_format($result['payroll']['deductions']['napsa'] ?? 0, 2) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right">ZMW <?= number_format($result['payroll']['deductions']['nhima'] ?? 0, 2) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right">ZMW <?= number_format($result['payroll']['taxes']['paye'] ?? 0, 2) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right font-bold">ZMW <?= number_format($result['payroll']['total_deductions'], 2) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right font-bold">ZMW <?= number_format($result['payroll']['net_pay'], 2) ?></td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<form action="/payroll.php" method="POST" class="mt-6">
|
||||
<input type="hidden" name="pay_period_month" value="<?= htmlspecialchars($pay_period_month) ?>">
|
||||
<input type="hidden" name="pay_period_year" value="<?= htmlspecialchars($pay_period_year) ?>">
|
||||
<input type="hidden" name="payroll_results_json" value='<?= htmlspecialchars(json_encode($payroll_results)) ?>'>
|
||||
<button type="submit" name="save_payroll" class="bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded">Finalize & Save Payroll Run</button>
|
||||
</form>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1"><a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/employees.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Employees</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll.php" class="block py-4 px-4 text-white font-bold no-underline">Payroll</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll_history.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll History</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
84
payroll_history.php
Normal file
84
payroll_history.php
Normal file
@ -0,0 +1,84 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id']) || $_SESSION['role'] !== 'admin') {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
|
||||
// Fetch payroll runs for the company
|
||||
$stmt = db()->prepare("SELECT * FROM payroll_runs WHERE company_id = ? ORDER BY pay_period_year DESC, pay_period_month DESC");
|
||||
$stmt->execute([$company_id]);
|
||||
$payroll_runs = $stmt->fetchAll();
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Payroll History - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h1 class="text-2xl font-bold text-gray-800 mb-6">Payroll Run History</h1>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-gray-200">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Pay Period</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Status</th>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Run Date</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="bg-white divide-y divide-gray-200">
|
||||
<?php if (empty($payroll_runs)): ?>
|
||||
<tr>
|
||||
<td colspan="4" class="px-6 py-4 text-center text-sm text-gray-500">No payroll history found.</td>
|
||||
</tr>
|
||||
<?php else: ?>
|
||||
<?php foreach ($payroll_runs as $run): ?>
|
||||
<tr>
|
||||
<td class="px-6 py-4 text-sm font-medium text-gray-900"><?= htmlspecialchars(date('F Y', mktime(0,0,0, (int)$run['pay_period_month'], 1, (int)$run['pay_period_year']))) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500"><span class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-green-100 text-green-800"><?= htmlspecialchars(ucfirst($run['status'])) ?></span></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500"><?= htmlspecialchars(date('d M Y, H:i', strtotime($run['run_date']))) ?></td>
|
||||
<td class="px-6 py-4 text-right text-sm font-medium">
|
||||
<a href="/payslips.php?run_id=<?= $run['id'] ?>" class="text-indigo-600 hover:text-indigo-900">View Payslips</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1"><a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/employees.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Employees</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll_history.php" class="block py-4 px-4 text-white font-bold no-underline">Payroll History</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
102
payslips.php
Normal file
102
payslips.php
Normal file
@ -0,0 +1,102 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
require_once __DIR__ . '/vendor/autoload.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id']) || $_SESSION['role'] !== 'admin') {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
if (!isset($_GET['run_id'])) {
|
||||
header('Location: /payroll_history.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$run_id = $_GET['run_id'];
|
||||
|
||||
// Fetch run details
|
||||
$stmt = db()->prepare("SELECT * FROM payroll_runs WHERE id = ? AND company_id = ?");
|
||||
$stmt->execute([$run_id, $company_id]);
|
||||
$run = $stmt->fetch();
|
||||
|
||||
if (!$run) {
|
||||
header('Location: /payroll_history.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
// Fetch payslips for the run
|
||||
$stmt = db()->prepare("SELECT p.*, e.first_name, e.last_name FROM payslips p JOIN employees e ON p.employee_id = e.id WHERE p.payroll_run_id = ?");
|
||||
$stmt->execute([$run_id]);
|
||||
$payslips = $stmt->fetchAll();
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Payslips for <?= htmlspecialchars(date('F Y', mktime(0,0,0, (int)$run['pay_period_month'], 1, (int)$run['pay_period_year']))) ?> - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h1 class="text-2xl font-bold text-gray-800 mb-6">Payslips for <?= htmlspecialchars(date('F Y', mktime(0,0,0, (int)$run['pay_period_month'], 1, (int)$run['pay_period_year']))) ?></h1>
|
||||
<div class="overflow-x-auto">
|
||||
<table class="min-w-full divide-y divide-gray-200">
|
||||
<thead class="bg-gray-50">
|
||||
<tr>
|
||||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase">Employee</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Net Pay</th>
|
||||
<th class="px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase">Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="bg-white divide-y divide-gray-200">
|
||||
<?php if (empty($payslips)): ?>
|
||||
<tr>
|
||||
<td colspan="3" class="px-6 py-4 text-center text-sm text-gray-500">No payslips found for this run.</td>
|
||||
</tr>
|
||||
<?php else: ?>
|
||||
<?php foreach ($payslips as $payslip): ?>
|
||||
<tr>
|
||||
<td class="px-6 py-4 text-sm font-medium text-gray-900"><?= htmlspecialchars($payslip['first_name'] . ' ' . $payslip['last_name']) ?></td>
|
||||
<td class="px-6 py-4 text-sm text-gray-500 text-right">ZMW <?= htmlspecialchars(number_format((float)$payslip['net_pay'], 2)) ?></td>
|
||||
<td class="px-6 py-4 text-right text-sm font-medium">
|
||||
<a href="/download_payslip.php?payslip_id=<?= $payslip['id'] ?>" class="text-indigo-600 hover:text-indigo-900" target="_blank">Download PDF</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
<?php endif; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mt-6">
|
||||
<a href="/payroll_history.php" class="text-blue-500 hover:text-blue-700">← Back to Payroll History</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1"><a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/employees.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Employees</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/payroll_history.php" class="block py-4 px-4 text-white font-bold no-underline">Payroll History</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/settings.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Settings</a></li>
|
||||
<li class="mr-3 flex-1"><a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
109
register.php
Normal file
109
register.php
Normal file
@ -0,0 +1,109 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
$error_message = '';
|
||||
$success_message = '';
|
||||
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
||||
$company_name = $_POST['company_name'] ?? '';
|
||||
$email = $_POST['email'] ?? '';
|
||||
$password = $_POST['password'] ?? '';
|
||||
|
||||
if (empty($company_name) || empty($email) || empty($password)) {
|
||||
$error_message = 'All fields are required.';
|
||||
} else {
|
||||
try {
|
||||
$pdo = db();
|
||||
|
||||
// Check if email already exists
|
||||
$stmt = $pdo->prepare("SELECT id FROM users WHERE email = ?");
|
||||
$stmt->execute([$email]);
|
||||
if ($stmt->fetch()) {
|
||||
$error_message = 'A user with this email already exists.';
|
||||
} else {
|
||||
// Start transaction
|
||||
$pdo->beginTransaction();
|
||||
|
||||
// 1. Create company
|
||||
$stmt = $pdo->prepare("INSERT INTO companies (name) VALUES (?)");
|
||||
$stmt->execute([$company_name]);
|
||||
$company_id = $pdo->lastInsertId();
|
||||
|
||||
// 2. Create admin user
|
||||
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
|
||||
$stmt = $pdo->prepare("INSERT INTO users (company_id, email, password, role) VALUES (?, ?, ?, 'admin')");
|
||||
$stmt->execute([$company_id, $email, $hashed_password]);
|
||||
$user_id = $pdo->lastInsertId();
|
||||
|
||||
// 3. Create a corresponding employee record for the admin user
|
||||
// For simplicity, we'll use the email prefix as first/last name
|
||||
$email_parts = explode('@', $email);
|
||||
$first_name = ucfirst($email_parts[0]);
|
||||
$last_name = 'Admin';
|
||||
|
||||
$stmt = $pdo->prepare("INSERT INTO employees (user_id, company_id, first_name, last_name, position) VALUES (?, ?, ?, ?, 'Administrator')");
|
||||
$stmt->execute([$user_id, $company_id, $first_name, $last_name]);
|
||||
|
||||
// Commit transaction
|
||||
$pdo->commit();
|
||||
|
||||
header('Location: /login.php?registration=success');
|
||||
exit;
|
||||
}
|
||||
} catch (PDOException $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
$error_message = "Registration failed: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Register - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 flex items-center justify-center min-h-screen">
|
||||
|
||||
<div class="w-full max-w-md bg-white p-8 rounded-lg shadow-md">
|
||||
<div class="text-center mb-8">
|
||||
<a href="/" class="text-3xl font-bold bg-clip-text text-transparent" style="background: linear-gradient(45deg, #10B981, #F59E0B, #EF4444);">GPTPayroll</a>
|
||||
<h2 class="mt-2 text-2xl font-bold text-gray-800">Create Your Company Account</h2>
|
||||
</div>
|
||||
|
||||
<?php if ($error_message): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<form action="/register.php" method="POST">
|
||||
<div class="mb-4">
|
||||
<label for="company_name" class="block text-gray-700 text-sm font-bold mb-2">Company Name</label>
|
||||
<input type="text" id="company_name" name="company_name" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="email" class="block text-gray-700 text-sm font-bold mb-2">Your Email</label>
|
||||
<input type="email" id="email" name="email" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 leading-tight focus:outline-none focus:shadow-outline">
|
||||
</div>
|
||||
<div class="mb-6">
|
||||
<label for="password" class="block text-gray-700 text-sm font-bold mb-2">Password</label>
|
||||
<input type="password" id="password" name="password" required class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 mb-3 leading-tight focus:outline-none focus:shadow-outline">
|
||||
</div>
|
||||
<div class="flex items-center justify-between">
|
||||
<button type="submit" class="w-full bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Create Account
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<p class="text-center text-gray-500 text-xs mt-6">
|
||||
Already have an account? <a href="/login.php" class="text-green-500 hover:text-green-700">Log in here</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
180
settings.php
Normal file
180
settings.php
Normal file
@ -0,0 +1,180 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/db/config.php';
|
||||
|
||||
if (!isset($_SESSION['user_id']) || !isset($_SESSION['company_id']) || $_SESSION['role'] !== 'admin') {
|
||||
// Redirect non-admins to the dashboard or a generic error page
|
||||
header('Location: /dashboard.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$company_id = $_SESSION['company_id'];
|
||||
$error_message = '';
|
||||
$success_message = '';
|
||||
|
||||
// Define the settings keys we are managing
|
||||
$setting_keys = ['napsa_rate', 'napsa_ceiling', 'nhima_rate', 'paye_brackets'];
|
||||
|
||||
// Handle Settings Update
|
||||
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['update_settings'])) {
|
||||
try {
|
||||
$pdo = db();
|
||||
$pdo->beginTransaction();
|
||||
|
||||
foreach ($setting_keys as $key) {
|
||||
if (isset($_POST[$key])) {
|
||||
$value = $_POST[$key];
|
||||
// For PAYE brackets, we expect a JSON string, so we don't validate it beyond checking if it's set
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
"INSERT INTO settings (company_id, setting_key, setting_value) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE setting_value = VALUES(setting_value)"
|
||||
);
|
||||
$stmt->execute([$company_id, $key, $value]);
|
||||
}
|
||||
}
|
||||
|
||||
$pdo->commit();
|
||||
$success_message = 'Settings updated successfully!';
|
||||
} catch (Exception $e) {
|
||||
if ($pdo->inTransaction()) {
|
||||
$pdo->rollBack();
|
||||
}
|
||||
$error_message = "Failed to update settings: " . $e->getMessage();
|
||||
}
|
||||
}
|
||||
|
||||
// Fetch current settings for the company
|
||||
$settings = [];
|
||||
$stmt = db()->prepare("SELECT setting_key, setting_value FROM settings WHERE company_id = ? AND setting_key IN ('" . implode("',\'", $setting_keys) . "')");
|
||||
$stmt->execute([$company_id]);
|
||||
$results = $stmt->fetchAll();
|
||||
foreach ($results as $row) {
|
||||
$settings[$row['setting_key']] = $row['setting_value'];
|
||||
}
|
||||
|
||||
// Set default values if not present
|
||||
$defaults = [
|
||||
'napsa_rate' => '5', // 5%
|
||||
'napsa_ceiling' => '2880', // ZMW 2880
|
||||
'nhima_rate' => '1', // 1%
|
||||
'paye_brackets' => json_encode([
|
||||
['from' => 0, 'to' => 4800, 'rate' => 0],
|
||||
['from' => 4800.01, 'to' => 6800, 'rate' => 20],
|
||||
['from' => 6800.01, 'to' => 8900, 'rate' => 30],
|
||||
['from' => 8900.01, 'to' => null, 'rate' => 37.5]
|
||||
], JSON_PRETTY_PRINT)
|
||||
];
|
||||
|
||||
foreach ($defaults as $key => $value) {
|
||||
if (!isset($settings[$key])) {
|
||||
$settings[$key] = $value;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Payroll Settings - GPTPayroll</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
</head>
|
||||
<body class="bg-gray-100 font-sans leading-normal tracking-normal">
|
||||
<div class="flex md:flex-row-reverse flex-wrap">
|
||||
|
||||
<!-- Main Content -->
|
||||
<div class="w-full md:w-4/5 bg-gray-100">
|
||||
<div class="container bg-gray-100 pt-16 px-6 mx-auto">
|
||||
|
||||
<?php if ($error_message): ?>
|
||||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($error_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php if ($success_message): ?>
|
||||
<div class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
|
||||
<span class="block sm:inline"><?= htmlspecialchars($success_message) ?></span>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<div class="bg-white shadow-md rounded p-8">
|
||||
<h1 class="text-2xl font-bold text-gray-800 mb-6">Payroll Statutory Settings</h1>
|
||||
<p class="text-gray-600 mb-6">Configure the statutory rates for your company according to Zambian regulations.</p>
|
||||
|
||||
<form action="/settings.php" method="POST">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-8">
|
||||
<!-- NAPSA Settings -->
|
||||
<div class="border p-6 rounded-lg">
|
||||
<h3 class="text-lg font-semibold mb-4">NAPSA Settings</h3>
|
||||
<div class="mb-4">
|
||||
<label for="napsa_rate" class="block text-gray-700 text-sm font-bold mb-2">Contribution Rate (%)</label>
|
||||
<input type="number" step="0.01" name="napsa_rate" id="napsa_rate" value="<?= htmlspecialchars($settings['napsa_rate']) ?>" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
<p class="text-xs text-gray-500 mt-1">Employee and employer each contribute this percentage. Default is 5%.</p>
|
||||
</div>
|
||||
<div class="mb-4">
|
||||
<label for="napsa_ceiling" class="block text-gray-700 text-sm font-bold mb-2">Maximum Assessable Earnings (ZMW)</label>
|
||||
<input type="number" step="0.01" name="napsa_ceiling" id="napsa_ceiling" value="<?= htmlspecialchars($settings['napsa_ceiling']) ?>" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
<p class="text-xs text-gray-500 mt-1">The maximum monthly salary amount on which NAPSA contributions are calculated.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- NHIMA Settings -->
|
||||
<div class="border p-6 rounded-lg">
|
||||
<h3 class="text-lg font-semibold mb-4">NHIMA Settings</h3>
|
||||
<div class="mb-4">
|
||||
<label for="nhima_rate" class="block text-gray-700 text-sm font-bold mb-2">Contribution Rate (%)</label>
|
||||
<input type="number" step="0.01" name="nhima_rate" id="nhima_rate" value="<?= htmlspecialchars($settings['nhima_rate']) ?>" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700">
|
||||
<p class="text-xs text-gray-500 mt-1">Employee and employer each contribute this percentage of the basic salary. Default is 1%.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- PAYE Brackets -->
|
||||
<div class="mt-8 border p-6 rounded-lg">
|
||||
<h3 class="text-lg font-semibold mb-4">PAYE Tax Brackets (Monthly)</h3>
|
||||
<div class="mb-4">
|
||||
<label for="paye_brackets" class="block text-gray-700 text-sm font-bold mb-2">Brackets (JSON format)</label>
|
||||
<textarea name="paye_brackets" id="paye_brackets" rows="10" class="shadow appearance-none border rounded w-full py-2 px-3 text-gray-700 font-mono text-sm"><?= htmlspecialchars($settings['paye_brackets']) ?></textarea>
|
||||
<p class="text-xs text-gray-500 mt-1">Use `null` for the upper limit of the last bracket. Rates are percentages.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-8">
|
||||
<button type="submit" name="update_settings" class="bg-green-500 hover:bg-green-600 text-white font-bold py-2 px-4 rounded focus:outline-none focus:shadow-outline">
|
||||
Save Settings
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Sidebar -->
|
||||
<div class="w-full md:w-1/5 bg-gray-800 md:min-h-screen">
|
||||
<div class="md:relative mx-auto lg:float-right lg:px-6">
|
||||
<ul class="list-reset flex flex-row md:flex-col text-center md:text-left">
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/dashboard.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Dashboard</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/employees.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Employees</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/payroll_history.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Payroll History</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/settings.php" class="block py-4 px-4 text-white font-bold no-underline">Settings</a>
|
||||
</li>
|
||||
<li class="mr-3 flex-1">
|
||||
<a href="/logout.php" class="block py-4 px-4 text-gray-400 hover:text-white no-underline">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
38
superadmin/companies.php
Normal file
38
superadmin/companies.php
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
require_once 'header.php';
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->query("SELECT * FROM companies");
|
||||
$companies = $stmt->fetchAll();
|
||||
|
||||
?>
|
||||
|
||||
<h2>Manage Companies</h2>
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Name</th>
|
||||
<th>Created At</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($companies as $company): ?>
|
||||
<tr>
|
||||
<td><?php echo htmlspecialchars($company['id']); ?></td>
|
||||
<td><?php echo htmlspecialchars($company['name']); ?></td>
|
||||
<td><?php echo htmlspecialchars($company['created_at']); ?></td>
|
||||
<td>
|
||||
<a href="#" class="btn btn-primary btn-sm">Edit</a>
|
||||
<a href="#" class="btn btn-danger btn-sm">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
require_once 'footer.php';
|
||||
?>
|
||||
4
superadmin/footer.php
Normal file
4
superadmin/footer.php
Normal file
@ -0,0 +1,4 @@
|
||||
</div>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
53
superadmin/header.php
Normal file
53
superadmin/header.php
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
session_start();
|
||||
require_once __DIR__ . '/../db/config.php';
|
||||
|
||||
// Check if user is logged in and is a superadmin
|
||||
if (!isset($_SESSION['user_id'])) {
|
||||
header('Location: /login.php');
|
||||
exit;
|
||||
}
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->prepare("SELECT is_superadmin FROM users WHERE id = ?");
|
||||
$stmt->execute([$_SESSION['user_id']]);
|
||||
$user = $stmt->fetch();
|
||||
|
||||
if (!$user || $user['is_superadmin'] != 1) {
|
||||
header('Location: /dashboard.php');
|
||||
exit;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Super Admin</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<nav class="navbar navbar-expand-lg navbar-light bg-light">
|
||||
<div class="container-fluid">
|
||||
<a class="navbar-brand" href="/superadmin">Super Admin</a>
|
||||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navbarNav">
|
||||
<ul class="navbar-nav">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/superadmin/companies.php">Companies</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/superadmin/users.php">Users</a>
|
||||
</li>
|
||||
</ul>
|
||||
<ul class="navbar-nav ms-auto">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="/logout.php">Logout</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="container mt-4">
|
||||
15
superadmin/index.php
Normal file
15
superadmin/index.php
Normal file
@ -0,0 +1,15 @@
|
||||
<?php
|
||||
require_once 'header.php';
|
||||
?>
|
||||
|
||||
<h1>Welcome, Super Admin!</h1>
|
||||
<p>This is the super admin dashboard. You can manage companies and users from here.</p>
|
||||
|
||||
<div class="list-group">
|
||||
<a href="/superadmin/companies.php" class="list-group-item list-group-item-action">Manage Companies</a>
|
||||
<a href="/superadmin/users.php" class="list-group-item list-group-item-action">Manage Users</a>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
require_once 'footer.php';
|
||||
?>
|
||||
12
superadmin/promote_user.php
Normal file
12
superadmin/promote_user.php
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
require_once __DIR__ . '/../db/config.php';
|
||||
|
||||
try {
|
||||
$pdo = db();
|
||||
$sql = "UPDATE `users` SET `is_superadmin` = 1 WHERE `id` = 1";
|
||||
$pdo->exec($sql);
|
||||
echo "User with ID 1 has been promoted to super admin.\n";
|
||||
} catch (PDOException $e) {
|
||||
die("Failed to promote user: " . $e->getMessage() . "\n");
|
||||
}
|
||||
|
||||
40
superadmin/users.php
Normal file
40
superadmin/users.php
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
require_once 'header.php';
|
||||
|
||||
$pdo = db();
|
||||
$stmt = $pdo->query("SELECT users.id, users.email, users.is_superadmin, companies.name AS company_name FROM users LEFT JOIN companies ON users.company_id = companies.id ORDER BY users.id");
|
||||
$users = $stmt->fetchAll();
|
||||
|
||||
?>
|
||||
|
||||
<h2>Manage Users</h2>
|
||||
|
||||
<table class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Email</th>
|
||||
<th>Company</th>
|
||||
<th>Super Admin?</th>
|
||||
<th>Actions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($users as $user): ?>
|
||||
<tr>
|
||||
<td><?php echo htmlspecialchars($user['id']); ?></td>
|
||||
<td><?php echo htmlspecialchars($user['email']); ?></td>
|
||||
<td><?php echo htmlspecialchars($user['company_name'] ?? 'N/A'); ?></td>
|
||||
<td><?php echo $user['is_superadmin'] ? 'Yes' : 'No'; ?></td>
|
||||
<td>
|
||||
<a href="#" class="btn btn-primary btn-sm">Edit</a>
|
||||
<a href="#" class="btn btn-danger btn-sm">Delete</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php
|
||||
require_once 'footer.php';
|
||||
?>
|
||||
22
vendor/autoload.php
vendored
Normal file
22
vendor/autoload.php
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
if (PHP_VERSION_ID < 50600) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, $err);
|
||||
} elseif (!headers_sent()) {
|
||||
echo $err;
|
||||
}
|
||||
}
|
||||
throw new RuntimeException($err);
|
||||
}
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit9b715eea9ba573833974a4c60540dc87::getLoader();
|
||||
579
vendor/composer/ClassLoader.php
vendored
Normal file
579
vendor/composer/ClassLoader.php
vendored
Normal file
@ -0,0 +1,579 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
/**
|
||||
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||
*
|
||||
* $loader = new \Composer\Autoload\ClassLoader();
|
||||
*
|
||||
* // register classes with namespaces
|
||||
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||
* $loader->add('Symfony', __DIR__.'/framework');
|
||||
*
|
||||
* // activate the autoloader
|
||||
* $loader->register();
|
||||
*
|
||||
* // to enable searching the include path (eg. for PEAR packages)
|
||||
* $loader->setUseIncludePath(true);
|
||||
*
|
||||
* In this example, if you try to use a class in the Symfony\Component
|
||||
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||
* the autoloader will first look for the class under the component/
|
||||
* directory, and it will then fallback to the framework/ directory if not
|
||||
* found before giving up.
|
||||
*
|
||||
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see https://www.php-fig.org/psr/psr-0/
|
||||
* @see https://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
/** @var \Closure(string):void */
|
||||
private static $includeFile;
|
||||
|
||||
/** @var string|null */
|
||||
private $vendorDir;
|
||||
|
||||
// PSR-4
|
||||
/**
|
||||
* @var array<string, array<string, int>>
|
||||
*/
|
||||
private $prefixLengthsPsr4 = array();
|
||||
/**
|
||||
* @var array<string, list<string>>
|
||||
*/
|
||||
private $prefixDirsPsr4 = array();
|
||||
/**
|
||||
* @var list<string>
|
||||
*/
|
||||
private $fallbackDirsPsr4 = array();
|
||||
|
||||
// PSR-0
|
||||
/**
|
||||
* List of PSR-0 prefixes
|
||||
*
|
||||
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
|
||||
*
|
||||
* @var array<string, array<string, list<string>>>
|
||||
*/
|
||||
private $prefixesPsr0 = array();
|
||||
/**
|
||||
* @var list<string>
|
||||
*/
|
||||
private $fallbackDirsPsr0 = array();
|
||||
|
||||
/** @var bool */
|
||||
private $useIncludePath = false;
|
||||
|
||||
/**
|
||||
* @var array<string, string>
|
||||
*/
|
||||
private $classMap = array();
|
||||
|
||||
/** @var bool */
|
||||
private $classMapAuthoritative = false;
|
||||
|
||||
/**
|
||||
* @var array<string, bool>
|
||||
*/
|
||||
private $missingClasses = array();
|
||||
|
||||
/** @var string|null */
|
||||
private $apcuPrefix;
|
||||
|
||||
/**
|
||||
* @var array<string, self>
|
||||
*/
|
||||
private static $registeredLoaders = array();
|
||||
|
||||
/**
|
||||
* @param string|null $vendorDir
|
||||
*/
|
||||
public function __construct($vendorDir = null)
|
||||
{
|
||||
$this->vendorDir = $vendorDir;
|
||||
self::initializeIncludeClosure();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, list<string>>
|
||||
*/
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, list<string>>
|
||||
*/
|
||||
public function getPrefixesPsr4()
|
||||
{
|
||||
return $this->prefixDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getFallbackDirs()
|
||||
{
|
||||
return $this->fallbackDirsPsr0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return list<string>
|
||||
*/
|
||||
public function getFallbackDirsPsr4()
|
||||
{
|
||||
return $this->fallbackDirsPsr4;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, string> Array of classname => path
|
||||
*/
|
||||
public function getClassMap()
|
||||
{
|
||||
return $this->classMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array<string, string> $classMap Class to filename map
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addClassMap(array $classMap)
|
||||
{
|
||||
if ($this->classMap) {
|
||||
$this->classMap = array_merge($this->classMap, $classMap);
|
||||
} else {
|
||||
$this->classMap = $classMap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix, either
|
||||
* appending or prepending to the ones previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param list<string>|string $paths The PSR-0 root directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function add($prefix, $paths, $prepend = false)
|
||||
{
|
||||
$paths = (array) $paths;
|
||||
if (!$prefix) {
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
$paths,
|
||||
$this->fallbackDirsPsr0
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
$this->fallbackDirsPsr0,
|
||||
$paths
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$first = $prefix[0];
|
||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||
$this->prefixesPsr0[$first][$prefix] = $paths;
|
||||
|
||||
return;
|
||||
}
|
||||
if ($prepend) {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
$paths,
|
||||
$this->prefixesPsr0[$first][$prefix]
|
||||
);
|
||||
} else {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
$this->prefixesPsr0[$first][$prefix],
|
||||
$paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace, either
|
||||
* appending or prepending to the ones previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param list<string>|string $paths The PSR-4 base directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function addPsr4($prefix, $paths, $prepend = false)
|
||||
{
|
||||
$paths = (array) $paths;
|
||||
if (!$prefix) {
|
||||
// Register directories for the root namespace.
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
$paths,
|
||||
$this->fallbackDirsPsr4
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
$this->fallbackDirsPsr4,
|
||||
$paths
|
||||
);
|
||||
}
|
||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||
// Register directories for a new namespace.
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = $paths;
|
||||
} elseif ($prepend) {
|
||||
// Prepend directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
$paths,
|
||||
$this->prefixDirsPsr4[$prefix]
|
||||
);
|
||||
} else {
|
||||
// Append directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
$this->prefixDirsPsr4[$prefix],
|
||||
$paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix,
|
||||
* replacing any others previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param list<string>|string $paths The PSR-0 base directories
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function set($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr0 = (array) $paths;
|
||||
} else {
|
||||
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace,
|
||||
* replacing any others previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param list<string>|string $paths The PSR-4 base directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setPsr4($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr4 = (array) $paths;
|
||||
} else {
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns on searching the include path for class files.
|
||||
*
|
||||
* @param bool $useIncludePath
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUseIncludePath($useIncludePath)
|
||||
{
|
||||
$this->useIncludePath = $useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to check if the autoloader uses the include path to check
|
||||
* for classes.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getUseIncludePath()
|
||||
{
|
||||
return $this->useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off searching the prefix and fallback directories for classes
|
||||
* that have not been registered with the class map.
|
||||
*
|
||||
* @param bool $classMapAuthoritative
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||
{
|
||||
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should class lookup fail if not found in the current class map?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isClassMapAuthoritative()
|
||||
{
|
||||
return $this->classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||
*
|
||||
* @param string|null $apcuPrefix
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getApcuPrefix()
|
||||
{
|
||||
return $this->apcuPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers this instance as an autoloader.
|
||||
*
|
||||
* @param bool $prepend Whether to prepend the autoloader or not
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register($prepend = false)
|
||||
{
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
|
||||
if (null === $this->vendorDir) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($prepend) {
|
||||
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
|
||||
} else {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
self::$registeredLoaders[$this->vendorDir] = $this;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters this instance as an autoloader.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
spl_autoload_unregister(array($this, 'loadClass'));
|
||||
|
||||
if (null !== $this->vendorDir) {
|
||||
unset(self::$registeredLoaders[$this->vendorDir]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the given class or interface.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
* @return true|null True if loaded, null otherwise
|
||||
*/
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
$includeFile = self::$includeFile;
|
||||
$includeFile($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the path to the file where the class is defined.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
*
|
||||
* @return string|false The path if found, false otherwise
|
||||
*/
|
||||
public function findFile($class)
|
||||
{
|
||||
// class map lookup
|
||||
if (isset($this->classMap[$class])) {
|
||||
return $this->classMap[$class];
|
||||
}
|
||||
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||
return false;
|
||||
}
|
||||
if (null !== $this->apcuPrefix) {
|
||||
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||
if ($hit) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
$file = $this->findFileWithExtension($class, '.php');
|
||||
|
||||
// Search for Hack files if we are running on HHVM
|
||||
if (false === $file && defined('HHVM_VERSION')) {
|
||||
$file = $this->findFileWithExtension($class, '.hh');
|
||||
}
|
||||
|
||||
if (null !== $this->apcuPrefix) {
|
||||
apcu_add($this->apcuPrefix.$class, $file);
|
||||
}
|
||||
|
||||
if (false === $file) {
|
||||
// Remember that this class does not exist.
|
||||
$this->missingClasses[$class] = true;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the currently registered loaders keyed by their corresponding vendor directories.
|
||||
*
|
||||
* @return array<string, self>
|
||||
*/
|
||||
public static function getRegisteredLoaders()
|
||||
{
|
||||
return self::$registeredLoaders;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $class
|
||||
* @param string $ext
|
||||
* @return string|false
|
||||
*/
|
||||
private function findFileWithExtension($class, $ext)
|
||||
{
|
||||
// PSR-4 lookup
|
||||
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||
|
||||
$first = $class[0];
|
||||
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||
$subPath = $class;
|
||||
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||
$subPath = substr($subPath, 0, $lastPos);
|
||||
$search = $subPath . '\\';
|
||||
if (isset($this->prefixDirsPsr4[$search])) {
|
||||
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||
if (file_exists($file = $dir . $pathEnd)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-4 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 lookup
|
||||
if (false !== $pos = strrpos($class, '\\')) {
|
||||
// namespaced class name
|
||||
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||
} else {
|
||||
// PEAR-like class name
|
||||
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||
}
|
||||
|
||||
if (isset($this->prefixesPsr0[$first])) {
|
||||
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||
if (0 === strpos($class, $prefix)) {
|
||||
foreach ($dirs as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 include paths.
|
||||
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
private static function initializeIncludeClosure()
|
||||
{
|
||||
if (self::$includeFile !== null) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*
|
||||
* @param string $file
|
||||
* @return void
|
||||
*/
|
||||
self::$includeFile = \Closure::bind(static function($file) {
|
||||
include $file;
|
||||
}, null, null);
|
||||
}
|
||||
}
|
||||
396
vendor/composer/InstalledVersions.php
vendored
Normal file
396
vendor/composer/InstalledVersions.php
vendored
Normal file
@ -0,0 +1,396 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer;
|
||||
|
||||
use Composer\Autoload\ClassLoader;
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
/**
|
||||
* This class is copied in every Composer installed project and available to all
|
||||
*
|
||||
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
|
||||
*
|
||||
* To require its presence, you can require `composer-runtime-api ^2.0`
|
||||
*
|
||||
* @final
|
||||
*/
|
||||
class InstalledVersions
|
||||
{
|
||||
/**
|
||||
* @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
|
||||
* @internal
|
||||
*/
|
||||
private static $selfDir = null;
|
||||
|
||||
/**
|
||||
* @var mixed[]|null
|
||||
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
|
||||
*/
|
||||
private static $installed;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
private static $installedIsLocalDir;
|
||||
|
||||
/**
|
||||
* @var bool|null
|
||||
*/
|
||||
private static $canGetVendors;
|
||||
|
||||
/**
|
||||
* @var array[]
|
||||
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
private static $installedByVendor = array();
|
||||
|
||||
/**
|
||||
* Returns a list of all package names which are present, either by being installed, replaced or provided
|
||||
*
|
||||
* @return string[]
|
||||
* @psalm-return list<string>
|
||||
*/
|
||||
public static function getInstalledPackages()
|
||||
{
|
||||
$packages = array();
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
$packages[] = array_keys($installed['versions']);
|
||||
}
|
||||
|
||||
if (1 === \count($packages)) {
|
||||
return $packages[0];
|
||||
}
|
||||
|
||||
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a list of all package names with a specific type e.g. 'library'
|
||||
*
|
||||
* @param string $type
|
||||
* @return string[]
|
||||
* @psalm-return list<string>
|
||||
*/
|
||||
public static function getInstalledPackagesByType($type)
|
||||
{
|
||||
$packagesByType = array();
|
||||
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
foreach ($installed['versions'] as $name => $package) {
|
||||
if (isset($package['type']) && $package['type'] === $type) {
|
||||
$packagesByType[] = $name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $packagesByType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given package is installed
|
||||
*
|
||||
* This also returns true if the package name is provided or replaced by another package
|
||||
*
|
||||
* @param string $packageName
|
||||
* @param bool $includeDevRequirements
|
||||
* @return bool
|
||||
*/
|
||||
public static function isInstalled($packageName, $includeDevRequirements = true)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (isset($installed['versions'][$packageName])) {
|
||||
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the given package satisfies a version constraint
|
||||
*
|
||||
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
|
||||
*
|
||||
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
|
||||
*
|
||||
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
|
||||
* @param string $packageName
|
||||
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
|
||||
* @return bool
|
||||
*/
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
{
|
||||
$constraint = $parser->parseConstraints((string) $constraint);
|
||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||
|
||||
return $provided->matches($constraint);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a version constraint representing all the range(s) which are installed for a given package
|
||||
*
|
||||
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
|
||||
* whether a given version of a package is installed, and not just whether it exists
|
||||
*
|
||||
* @param string $packageName
|
||||
* @return string Version constraint usable with composer/semver
|
||||
*/
|
||||
public static function getVersionRanges($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$ranges = array();
|
||||
if (isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
|
||||
}
|
||||
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
|
||||
}
|
||||
if (array_key_exists('provided', $installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
|
||||
}
|
||||
|
||||
return implode(' || ', $ranges);
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||
*/
|
||||
public static function getVersion($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['version'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
|
||||
*/
|
||||
public static function getPrettyVersion($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
|
||||
*/
|
||||
public static function getReference($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!isset($installed['versions'][$packageName]['reference'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $installed['versions'][$packageName]['reference'];
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $packageName
|
||||
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
|
||||
*/
|
||||
public static function getInstallPath($packageName)
|
||||
{
|
||||
foreach (self::getInstalled() as $installed) {
|
||||
if (!isset($installed['versions'][$packageName])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
|
||||
}
|
||||
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
|
||||
*/
|
||||
public static function getRootPackage()
|
||||
{
|
||||
$installed = self::getInstalled();
|
||||
|
||||
return $installed[0]['root'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw installed.php data for custom implementations
|
||||
*
|
||||
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
|
||||
* @return array[]
|
||||
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
|
||||
*/
|
||||
public static function getRawData()
|
||||
{
|
||||
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
self::$installed = include __DIR__ . '/installed.php';
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the raw data of all installed.php which are currently loaded for custom implementations
|
||||
*
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
public static function getAllRawData()
|
||||
{
|
||||
return self::getInstalled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Lets you reload the static array from another file
|
||||
*
|
||||
* This is only useful for complex integrations in which a project needs to use
|
||||
* this class but then also needs to execute another project's autoloader in process,
|
||||
* and wants to ensure both projects have access to their version of installed.php.
|
||||
*
|
||||
* A typical case would be PHPUnit, where it would need to make sure it reads all
|
||||
* the data it needs from this class, then call reload() with
|
||||
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
|
||||
* the project in which it runs can then also use this class safely, without
|
||||
* interference between PHPUnit's dependencies and the project's dependencies.
|
||||
*
|
||||
* @param array[] $data A vendor/composer/installed.php data set
|
||||
* @return void
|
||||
*
|
||||
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
|
||||
*/
|
||||
public static function reload($data)
|
||||
{
|
||||
self::$installed = $data;
|
||||
self::$installedByVendor = array();
|
||||
|
||||
// when using reload, we disable the duplicate protection to ensure that self::$installed data is
|
||||
// always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
|
||||
// so we have to assume it does not, and that may result in duplicate data being returned when listing
|
||||
// all installed packages for example
|
||||
self::$installedIsLocalDir = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private static function getSelfDir()
|
||||
{
|
||||
if (self::$selfDir === null) {
|
||||
self::$selfDir = strtr(__DIR__, '\\', '/');
|
||||
}
|
||||
|
||||
return self::$selfDir;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array[]
|
||||
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
|
||||
*/
|
||||
private static function getInstalled()
|
||||
{
|
||||
if (null === self::$canGetVendors) {
|
||||
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
|
||||
}
|
||||
|
||||
$installed = array();
|
||||
$copiedLocalDir = false;
|
||||
|
||||
if (self::$canGetVendors) {
|
||||
$selfDir = self::getSelfDir();
|
||||
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
|
||||
$vendorDir = strtr($vendorDir, '\\', '/');
|
||||
if (isset(self::$installedByVendor[$vendorDir])) {
|
||||
$installed[] = self::$installedByVendor[$vendorDir];
|
||||
} elseif (is_file($vendorDir.'/composer/installed.php')) {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require $vendorDir.'/composer/installed.php';
|
||||
self::$installedByVendor[$vendorDir] = $required;
|
||||
$installed[] = $required;
|
||||
if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
|
||||
self::$installed = $required;
|
||||
self::$installedIsLocalDir = true;
|
||||
}
|
||||
}
|
||||
if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
|
||||
$copiedLocalDir = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (null === self::$installed) {
|
||||
// only require the installed.php file if this file is loaded from its dumped location,
|
||||
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
|
||||
if (substr(__DIR__, -8, 1) !== 'C') {
|
||||
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
|
||||
$required = require __DIR__ . '/installed.php';
|
||||
self::$installed = $required;
|
||||
} else {
|
||||
self::$installed = array();
|
||||
}
|
||||
}
|
||||
|
||||
if (self::$installed !== array() && !$copiedLocalDir) {
|
||||
$installed[] = self::$installed;
|
||||
}
|
||||
|
||||
return $installed;
|
||||
}
|
||||
}
|
||||
21
vendor/composer/LICENSE
vendored
Normal file
21
vendor/composer/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
||||
22
vendor/composer/autoload_classmap.php
vendored
Normal file
22
vendor/composer/autoload_classmap.php
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
'Datamatrix' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php',
|
||||
'PDF417' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/pdf417.php',
|
||||
'QRcode' => $vendorDir . '/tecnickcom/tcpdf/include/barcodes/qrcode.php',
|
||||
'TCPDF' => $vendorDir . '/tecnickcom/tcpdf/tcpdf.php',
|
||||
'TCPDF2DBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php',
|
||||
'TCPDFBarcode' => $vendorDir . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php',
|
||||
'TCPDF_COLORS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_colors.php',
|
||||
'TCPDF_FILTERS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_filters.php',
|
||||
'TCPDF_FONTS' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_fonts.php',
|
||||
'TCPDF_FONT_DATA' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_font_data.php',
|
||||
'TCPDF_IMAGES' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_images.php',
|
||||
'TCPDF_STATIC' => $vendorDir . '/tecnickcom/tcpdf/include/tcpdf_static.php',
|
||||
);
|
||||
9
vendor/composer/autoload_namespaces.php
vendored
Normal file
9
vendor/composer/autoload_namespaces.php
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
||||
9
vendor/composer/autoload_psr4.php
vendored
Normal file
9
vendor/composer/autoload_psr4.php
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(__DIR__);
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
||||
38
vendor/composer/autoload_real.php
vendored
Normal file
38
vendor/composer/autoload_real.php
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit9b715eea9ba573833974a4c60540dc87
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
public static function loadClassLoader($class)
|
||||
{
|
||||
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||
require __DIR__ . '/ClassLoader.php';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Composer\Autoload\ClassLoader
|
||||
*/
|
||||
public static function getLoader()
|
||||
{
|
||||
if (null !== self::$loader) {
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
require __DIR__ . '/platform_check.php';
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit9b715eea9ba573833974a4c60540dc87', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit9b715eea9ba573833974a4c60540dc87', 'loadClassLoader'));
|
||||
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit9b715eea9ba573833974a4c60540dc87::getInitializer($loader));
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
||||
32
vendor/composer/autoload_static.php
vendored
Normal file
32
vendor/composer/autoload_static.php
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
// autoload_static.php @generated by Composer
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit9b715eea9ba573833974a4c60540dc87
|
||||
{
|
||||
public static $classMap = array (
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
'Datamatrix' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/datamatrix.php',
|
||||
'PDF417' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/pdf417.php',
|
||||
'QRcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/barcodes/qrcode.php',
|
||||
'TCPDF' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf.php',
|
||||
'TCPDF2DBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_2d.php',
|
||||
'TCPDFBarcode' => __DIR__ . '/..' . '/tecnickcom/tcpdf/tcpdf_barcodes_1d.php',
|
||||
'TCPDF_COLORS' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_colors.php',
|
||||
'TCPDF_FILTERS' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_filters.php',
|
||||
'TCPDF_FONTS' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_fonts.php',
|
||||
'TCPDF_FONT_DATA' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_font_data.php',
|
||||
'TCPDF_IMAGES' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_images.php',
|
||||
'TCPDF_STATIC' => __DIR__ . '/..' . '/tecnickcom/tcpdf/include/tcpdf_static.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->classMap = ComposerStaticInit9b715eea9ba573833974a4c60540dc87::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
}
|
||||
80
vendor/composer/installed.json
vendored
Normal file
80
vendor/composer/installed.json
vendored
Normal file
@ -0,0 +1,80 @@
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"version": "6.10.0",
|
||||
"version_normalized": "6.10.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tecnickcom/TCPDF.git",
|
||||
"reference": "ca5b6de294512145db96bcbc94e61696599c391d"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/ca5b6de294512145db96bcbc94e61696599c391d",
|
||||
"reference": "ca5b6de294512145db96bcbc94e61696599c391d",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-curl": "*",
|
||||
"php": ">=7.1.0"
|
||||
},
|
||||
"time": "2025-05-27T18:02:28+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"config",
|
||||
"include",
|
||||
"tcpdf.php",
|
||||
"tcpdf_barcodes_1d.php",
|
||||
"tcpdf_barcodes_2d.php",
|
||||
"include/tcpdf_colors.php",
|
||||
"include/tcpdf_filters.php",
|
||||
"include/tcpdf_font_data.php",
|
||||
"include/tcpdf_fonts.php",
|
||||
"include/tcpdf_images.php",
|
||||
"include/tcpdf_static.php",
|
||||
"include/barcodes/datamatrix.php",
|
||||
"include/barcodes/pdf417.php",
|
||||
"include/barcodes/qrcode.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"LGPL-3.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicola Asuni",
|
||||
"email": "info@tecnick.com",
|
||||
"role": "lead"
|
||||
}
|
||||
],
|
||||
"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
|
||||
"homepage": "http://www.tcpdf.org/",
|
||||
"keywords": [
|
||||
"PDFD32000-2008",
|
||||
"TCPDF",
|
||||
"barcodes",
|
||||
"datamatrix",
|
||||
"pdf",
|
||||
"pdf417",
|
||||
"qrcode"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/tecnickcom/TCPDF/issues",
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.10.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ",
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"install-path": "../tecnickcom/tcpdf"
|
||||
}
|
||||
],
|
||||
"dev": true,
|
||||
"dev-package-names": []
|
||||
}
|
||||
32
vendor/composer/installed.php
vendored
Normal file
32
vendor/composer/installed.php
vendored
Normal file
@ -0,0 +1,32 @@
|
||||
<?php return array(
|
||||
'root' => array(
|
||||
'name' => '__root__',
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'ac1c373a0164f67cf882d1ad1ffe192553f6a42e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev' => true,
|
||||
),
|
||||
'versions' => array(
|
||||
'__root__' => array(
|
||||
'pretty_version' => 'dev-master',
|
||||
'version' => 'dev-master',
|
||||
'reference' => 'ac1c373a0164f67cf882d1ad1ffe192553f6a42e',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'tecnickcom/tcpdf' => array(
|
||||
'pretty_version' => '6.10.0',
|
||||
'version' => '6.10.0.0',
|
||||
'reference' => 'ca5b6de294512145db96bcbc94e61696599c391d',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../tecnickcom/tcpdf',
|
||||
'aliases' => array(),
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
),
|
||||
);
|
||||
25
vendor/composer/platform_check.php
vendored
Normal file
25
vendor/composer/platform_check.php
vendored
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
// platform_check.php @generated by Composer
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 70100)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.1.0". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
if ($issues) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
||||
} elseif (!headers_sent()) {
|
||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||
}
|
||||
}
|
||||
throw new \RuntimeException(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues)
|
||||
);
|
||||
}
|
||||
3198
vendor/tecnickcom/tcpdf/CHANGELOG.TXT
vendored
Normal file
3198
vendor/tecnickcom/tcpdf/CHANGELOG.TXT
vendored
Normal file
File diff suppressed because it is too large
Load Diff
860
vendor/tecnickcom/tcpdf/LICENSE.TXT
vendored
Normal file
860
vendor/tecnickcom/tcpdf/LICENSE.TXT
vendored
Normal file
@ -0,0 +1,860 @@
|
||||
**********************************************************************
|
||||
* TCPDF LICENSE
|
||||
**********************************************************************
|
||||
|
||||
TCPDF 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, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
2002-2025 Nicola Asuni - Tecnick.com LTD
|
||||
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser 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
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. 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
|
||||
them 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 prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. 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.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey 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;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If 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 convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU 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 that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
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.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
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.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
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
|
||||
state 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 3 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, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program 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, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<http://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU 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 Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
83
vendor/tecnickcom/tcpdf/README.md
vendored
Normal file
83
vendor/tecnickcom/tcpdf/README.md
vendored
Normal file
@ -0,0 +1,83 @@
|
||||
# TCPDF
|
||||
*PHP PDF Library*
|
||||
|
||||
[](https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ)
|
||||
*Please consider supporting this project by making a donation via [PayPal](https://www.paypal.com/donate/?hosted_button_id=NZUEC5XS8MFBJ)*
|
||||
|
||||
* **category** Library
|
||||
* **author** Nicola Asuni <info@tecnick.com>
|
||||
* **copyright** 2002-2025 Nicola Asuni - Tecnick.com LTD
|
||||
* **license** http://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE.TXT)
|
||||
* **link** http://www.tcpdf.org
|
||||
* **source** https://github.com/tecnickcom/TCPDF
|
||||
|
||||
|
||||
## NOTE
|
||||
A new version of this library is under development at https://github.com/tecnickcom/tc-lib-pdf and as a consequence this library is in support only mode.
|
||||
|
||||
|
||||
|
||||
## Description
|
||||
|
||||
PHP library for generating PDF documents on-the-fly.
|
||||
|
||||
### Main Features:
|
||||
* no external libraries are required for the basic functions;
|
||||
* all standard page formats, custom page formats, custom margins and units of measure;
|
||||
* UTF-8 Unicode and Right-To-Left languages;
|
||||
* TrueTypeUnicode, OpenTypeUnicode v1, TrueType, OpenType v1, Type1 and CID-0 fonts;
|
||||
* font subsetting;
|
||||
* methods to publish some XHTML + CSS code, Javascript and Forms;
|
||||
* images, graphic (geometric figures) and transformation methods;
|
||||
* supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImagMagick (http://www.imagemagick.org/script/formats.php)
|
||||
* 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
|
||||
* JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
|
||||
* automatic page header and footer management;
|
||||
* document encryption up to 256 bit and digital signature certifications;
|
||||
* transactions to UNDO commands;
|
||||
* PDF annotations, including links, text and file attachments;
|
||||
* text rendering modes (fill, stroke and clipping);
|
||||
* multiple columns mode;
|
||||
* no-write page regions;
|
||||
* bookmarks, named destinations and table of content;
|
||||
* text hyphenation;
|
||||
* text stretching and spacing (tracking);
|
||||
* automatic page break, line break and text alignments including justification;
|
||||
* automatic page numbering and page groups;
|
||||
* move and delete pages;
|
||||
* page compression (requires php-zlib extension);
|
||||
* XOBject Templates;
|
||||
* Layers and object visibility.
|
||||
* PDF/A-1b support.
|
||||
|
||||
### Third party fonts:
|
||||
|
||||
This library may include third party font files released with different licenses.
|
||||
|
||||
All the PHP files on the fonts directory are subject to the general TCPDF license (GNU-LGPLv3),
|
||||
they do not contain any binary data but just a description of the general properties of a particular font.
|
||||
These files can be also generated on the fly using the font utilities and TCPDF methods.
|
||||
|
||||
All the original binary TTF font files have been renamed for compatibility with TCPDF and compressed using the gzcompress PHP function that uses the ZLIB data format (.z files).
|
||||
|
||||
The binary files (.z) that begins with the prefix "free" have been extracted from the GNU FreeFont collection (GNU-GPLv3).
|
||||
The binary files (.z) that begins with the prefix "pdfa" have been derived from the GNU FreeFont, so they are subject to the same license.
|
||||
For the details of Copyright, License and other information, please check the files inside the directory fonts/freefont-20120503
|
||||
Link : http://www.gnu.org/software/freefont/
|
||||
|
||||
The binary files (.z) that begins with the prefix "dejavu" have been extracted from the DejaVu fonts 2.33 (Bitstream) collection.
|
||||
For the details of Copyright, License and other information, please check the files inside the directory fonts/dejavu-fonts-ttf-2.33
|
||||
Link : http://dejavu-fonts.org
|
||||
|
||||
The binary files (.z) that begins with the prefix "ae" have been extracted from the Arabeyes.org collection (GNU-GPLv2).
|
||||
Link : http://projects.arabeyes.org/
|
||||
|
||||
### ICC profile:
|
||||
|
||||
TCPDF includes the sRGB.icc profile from the icc-profiles-free Debian package:
|
||||
https://packages.debian.org/source/stable/icc-profiles-free
|
||||
|
||||
|
||||
## Developer(s) Contact
|
||||
|
||||
* Nicola Asuni <info@tecnick.com>
|
||||
1
vendor/tecnickcom/tcpdf/VERSION
vendored
Normal file
1
vendor/tecnickcom/tcpdf/VERSION
vendored
Normal file
@ -0,0 +1 @@
|
||||
6.10.0
|
||||
46
vendor/tecnickcom/tcpdf/composer.json
vendored
Normal file
46
vendor/tecnickcom/tcpdf/composer.json
vendored
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"type": "library",
|
||||
"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
|
||||
"keywords": [
|
||||
"PDF",
|
||||
"tcpdf",
|
||||
"PDFD32000-2008",
|
||||
"qrcode",
|
||||
"datamatrix",
|
||||
"pdf417",
|
||||
"barcodes"
|
||||
],
|
||||
"homepage": "http://www.tcpdf.org/",
|
||||
"version": "6.10.0",
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Nicola Asuni",
|
||||
"email": "info@tecnick.com",
|
||||
"role": "lead"
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=7.1.0",
|
||||
"ext-curl": "*"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"config",
|
||||
"include",
|
||||
"tcpdf.php",
|
||||
"tcpdf_barcodes_1d.php",
|
||||
"tcpdf_barcodes_2d.php",
|
||||
"include/tcpdf_colors.php",
|
||||
"include/tcpdf_filters.php",
|
||||
"include/tcpdf_font_data.php",
|
||||
"include/tcpdf_fonts.php",
|
||||
"include/tcpdf_images.php",
|
||||
"include/tcpdf_static.php",
|
||||
"include/barcodes/datamatrix.php",
|
||||
"include/barcodes/pdf417.php",
|
||||
"include/barcodes/qrcode.php"
|
||||
]
|
||||
}
|
||||
}
|
||||
235
vendor/tecnickcom/tcpdf/config/tcpdf_config.php
vendored
Normal file
235
vendor/tecnickcom/tcpdf/config/tcpdf_config.php
vendored
Normal file
@ -0,0 +1,235 @@
|
||||
<?php
|
||||
//============================================================+
|
||||
// File name : tcpdf_config.php
|
||||
// Begin : 2004-06-11
|
||||
// Last Update : 2014-12-11
|
||||
//
|
||||
// Description : Configuration file for TCPDF.
|
||||
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
|
||||
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
|
||||
// -------------------------------------------------------------------
|
||||
// Copyright (C) 2004-2014 Nicola Asuni - Tecnick.com LTD
|
||||
//
|
||||
// This file is part of TCPDF software library.
|
||||
//
|
||||
// TCPDF 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, either version 3 of the
|
||||
// License, or (at your option) any later version.
|
||||
//
|
||||
// TCPDF 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.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with TCPDF. If not, see <http://www.gnu.org/licenses/>.
|
||||
//
|
||||
// See LICENSE.TXT file for more information.
|
||||
//============================================================+
|
||||
|
||||
/**
|
||||
* Configuration file for TCPDF.
|
||||
* @author Nicola Asuni
|
||||
* @package com.tecnick.tcpdf
|
||||
* @version 4.9.005
|
||||
* @since 2004-10-27
|
||||
*/
|
||||
|
||||
// IMPORTANT:
|
||||
// If you define the constant K_TCPDF_EXTERNAL_CONFIG, all the following settings will be ignored.
|
||||
// If you use the tcpdf_autoconfig.php, then you can overwrite some values here.
|
||||
|
||||
|
||||
/**
|
||||
* Installation path (/var/www/tcpdf/).
|
||||
* By default it is automatically calculated but you can also set it as a fixed string to improve performances.
|
||||
*/
|
||||
//define ('K_PATH_MAIN', '');
|
||||
|
||||
/**
|
||||
* URL path to tcpdf installation folder (http://localhost/tcpdf/).
|
||||
* By default it is automatically set but you can also set it as a fixed string to improve performances.
|
||||
*/
|
||||
//define ('K_PATH_URL', '');
|
||||
|
||||
/**
|
||||
* Path for PDF fonts.
|
||||
* By default it is automatically set but you can also set it as a fixed string to improve performances.
|
||||
*/
|
||||
//define ('K_PATH_FONTS', K_PATH_MAIN.'fonts/');
|
||||
|
||||
/**
|
||||
* Default images directory.
|
||||
* By default it is automatically set but you can also set it as a fixed string to improve performances.
|
||||
*/
|
||||
//define ('K_PATH_IMAGES', '');
|
||||
|
||||
/**
|
||||
* Deafult image logo used be the default Header() method.
|
||||
* Please set here your own logo or an empty string to disable it.
|
||||
*/
|
||||
//define ('PDF_HEADER_LOGO', '');
|
||||
|
||||
/**
|
||||
* Header logo image width in user units.
|
||||
*/
|
||||
//define ('PDF_HEADER_LOGO_WIDTH', 0);
|
||||
|
||||
/**
|
||||
* Cache directory for temporary files (full path).
|
||||
*/
|
||||
//define ('K_PATH_CACHE', '/tmp/');
|
||||
|
||||
/**
|
||||
* Generic name for a blank image.
|
||||
*/
|
||||
define ('K_BLANK_IMAGE', '_blank.png');
|
||||
|
||||
/**
|
||||
* Page format.
|
||||
*/
|
||||
define ('PDF_PAGE_FORMAT', 'A4');
|
||||
|
||||
/**
|
||||
* Page orientation (P=portrait, L=landscape).
|
||||
*/
|
||||
define ('PDF_PAGE_ORIENTATION', 'P');
|
||||
|
||||
/**
|
||||
* Document creator.
|
||||
*/
|
||||
define ('PDF_CREATOR', 'TCPDF');
|
||||
|
||||
/**
|
||||
* Document author.
|
||||
*/
|
||||
define ('PDF_AUTHOR', 'TCPDF');
|
||||
|
||||
/**
|
||||
* Header title.
|
||||
*/
|
||||
define ('PDF_HEADER_TITLE', 'TCPDF Example');
|
||||
|
||||
/**
|
||||
* Header description string.
|
||||
*/
|
||||
define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org");
|
||||
|
||||
/**
|
||||
* Document unit of measure [pt=point, mm=millimeter, cm=centimeter, in=inch].
|
||||
*/
|
||||
define ('PDF_UNIT', 'mm');
|
||||
|
||||
/**
|
||||
* Header margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_HEADER', 5);
|
||||
|
||||
/**
|
||||
* Footer margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_FOOTER', 10);
|
||||
|
||||
/**
|
||||
* Top margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_TOP', 27);
|
||||
|
||||
/**
|
||||
* Bottom margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_BOTTOM', 25);
|
||||
|
||||
/**
|
||||
* Left margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_LEFT', 15);
|
||||
|
||||
/**
|
||||
* Right margin.
|
||||
*/
|
||||
define ('PDF_MARGIN_RIGHT', 15);
|
||||
|
||||
/**
|
||||
* Default main font name.
|
||||
*/
|
||||
define ('PDF_FONT_NAME_MAIN', 'helvetica');
|
||||
|
||||
/**
|
||||
* Default main font size.
|
||||
*/
|
||||
define ('PDF_FONT_SIZE_MAIN', 10);
|
||||
|
||||
/**
|
||||
* Default data font name.
|
||||
*/
|
||||
define ('PDF_FONT_NAME_DATA', 'helvetica');
|
||||
|
||||
/**
|
||||
* Default data font size.
|
||||
*/
|
||||
define ('PDF_FONT_SIZE_DATA', 8);
|
||||
|
||||
/**
|
||||
* Default monospaced font name.
|
||||
*/
|
||||
define ('PDF_FONT_MONOSPACED', 'courier');
|
||||
|
||||
/**
|
||||
* Ratio used to adjust the conversion of pixels to user units.
|
||||
*/
|
||||
define ('PDF_IMAGE_SCALE_RATIO', 1.25);
|
||||
|
||||
/**
|
||||
* Magnification factor for titles.
|
||||
*/
|
||||
define('HEAD_MAGNIFICATION', 1.1);
|
||||
|
||||
/**
|
||||
* Height of cell respect font height.
|
||||
*/
|
||||
define('K_CELL_HEIGHT_RATIO', 1.25);
|
||||
|
||||
/**
|
||||
* Title magnification respect main font size.
|
||||
*/
|
||||
define('K_TITLE_MAGNIFICATION', 1.3);
|
||||
|
||||
/**
|
||||
* Reduction factor for small font.
|
||||
*/
|
||||
define('K_SMALL_RATIO', 2/3);
|
||||
|
||||
/**
|
||||
* Set to true to enable the special procedure used to avoid the overlappind of symbols on Thai language.
|
||||
*/
|
||||
define('K_THAI_TOPCHARS', true);
|
||||
|
||||
/**
|
||||
* If true allows to call TCPDF methods using HTML syntax
|
||||
* IMPORTANT: For security reason, disable this feature if you are printing user HTML content.
|
||||
*/
|
||||
define('K_TCPDF_CALLS_IN_HTML', false);
|
||||
|
||||
/**
|
||||
* List of TCPDF methods that are allowed to be called using HTML syntax.
|
||||
* Note: each method name must end with surrounded with | (pipe) character.
|
||||
* The constant K_TCPDF_CALLS_IN_HTML must be set to true.
|
||||
* IMPORTANT: For security reason, disable this feature if you are allowing user HTML content.
|
||||
*/
|
||||
define('K_ALLOWED_TCPDF_TAGS', '');
|
||||
|
||||
/**
|
||||
* If true and PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution.
|
||||
*/
|
||||
define('K_TCPDF_THROW_EXCEPTION_ERROR', false);
|
||||
|
||||
/**
|
||||
* Default timezone for datetime functions
|
||||
*/
|
||||
define('K_TIMEZONE', 'UTC');
|
||||
|
||||
//============================================================+
|
||||
// END OF FILE
|
||||
//============================================================+
|
||||
343
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/COPYING
vendored
Normal file
343
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/COPYING
vendored
Normal file
@ -0,0 +1,343 @@
|
||||
-* www.gnu.org *-
|
||||
|
||||
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.
|
||||
|
||||
863
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/ChangeLog
vendored
Normal file
863
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/ChangeLog
vendored
Normal file
@ -0,0 +1,863 @@
|
||||
2007-08-20 00:48 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Diagonal marks
|
||||
|
||||
2007-08-20 00:25 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* README: Added Release notes, preparing for 2.0 release.
|
||||
|
||||
2007-08-19 23:19 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Stack diacritics definition
|
||||
|
||||
2007-08-19 22:56 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Tholoth.sfd:
|
||||
* Added 'rlg' lookup table and subtable and registered stacked
|
||||
diacritic ligatures.
|
||||
* kasrah and kasratan were too close to the base glyph, fixed.
|
||||
|
||||
2007-08-19 22:28 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlHor.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlYarmook.sfd, ae_Arab.sfd, ae_Cortoba.sfd, ae_Furat.sfd,
|
||||
ae_Graph.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
|
||||
ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd,
|
||||
ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd,
|
||||
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd,
|
||||
ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd: Scaled up
|
||||
diacritic glyphs, this makes them more readable.
|
||||
|
||||
2007-08-19 22:03 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: New sukun, removed wrong anchors from
|
||||
kasrah
|
||||
|
||||
2007-08-19 20:26 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: Added 'rlg' lookup table and subtable
|
||||
and registered stacked diacritic ligatures.
|
||||
|
||||
2007-08-19 18:28 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: Fixed shaddas
|
||||
|
||||
2007-08-19 18:01 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: Stacked diacrititcs
|
||||
|
||||
2007-08-19 14:49 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Removed mark2mark anchors, now we use
|
||||
ligature substitution for stacked diacritics instead of anchors.
|
||||
Added 'rlg' lookup table and subtable and registered stacked
|
||||
diacritic ligatures.
|
||||
|
||||
2007-08-19 02:30 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Stacked diacritics added
|
||||
|
||||
2007-08-19 01:53 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ArabicReesha.sfd:
|
||||
* Added to new ligatures; <fathatan><alef isolated> and
|
||||
<fathatan><alef final>.
|
||||
* Small fixes to Jeem isolated width.
|
||||
|
||||
2007-08-18 21:30 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: Diacritics fixed except allahisolated
|
||||
ligature
|
||||
|
||||
2007-08-18 20:13 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: Removed old, buggy, anchors and auto
|
||||
added new ones, needs manual editing.
|
||||
|
||||
2007-08-18 19:11 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd: New shadda, modified sukun to meet the
|
||||
other marks
|
||||
|
||||
2007-08-18 17:20 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: New diacritics for ae_AlArabiya.sfd
|
||||
|
||||
2007-08-17 23:19 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Tholoth.sfd: ae_Tholoth.sfd: Added glyphs U+FC5E - U+FC62.
|
||||
|
||||
2007-08-16 14:56 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMohanad.sfd: AlMohanad: Fixed U+FEDA (kaf final) to take
|
||||
the shape of ordinary final kaf rather than the long variant.
|
||||
|
||||
2007-08-15 14:25 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ArabicReesha.sfd: ArabicReesha.sfd: Fixed a bug that caused
|
||||
some isolated glyphs to have more space to the right.
|
||||
|
||||
2007-08-15 12:02 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd,
|
||||
ae_Electron.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Khalid.sfd,
|
||||
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Sharjah.sfd,
|
||||
ae_Tarablus.sfd, ae_Tholoth.sfd: Add new 'liga' table without
|
||||
"Ignore Combining Marks" flag, allahisolated ligature belong to that
|
||||
table now, so when allahisolated has a tashkil on it, the ligature
|
||||
will be ignored and will use normal glyphs instead.
|
||||
|
||||
2007-08-15 11:05 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Haramain.sfd,
|
||||
ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Sindbad.sfd,
|
||||
ae_Tarablus.sfd: Added "Ignore Combining Marks flag" to 'liga'
|
||||
table.
|
||||
|
||||
2007-08-15 10:35 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ArabicReesha.sfd: ArabicReesha: New font based on SIL's
|
||||
Scheherazade, first version.
|
||||
|
||||
2007-08-15 00:23 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Shadda was missing mark2mark below anchor.
|
||||
|
||||
2007-08-14 23:28 Mohammed Adnene Trojette <adn@diwi.org>
|
||||
|
||||
* Makefile: GPL has been removed
|
||||
|
||||
2007-08-14 23:21 Mohammed Adnene Trojette <adn@diwi.org>
|
||||
|
||||
* COPYING, README: Copyright informations
|
||||
|
||||
2007-08-14 23:05 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* COPYING: Updated to refer to FreeFonts project.
|
||||
|
||||
2007-08-14 22:56 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Salem.sfd: Updated the copyright statement, to mention GPL
|
||||
font exception and FreeFonts project, again
|
||||
|
||||
2007-08-14 22:43 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Salem.sfd: Revert to 1.7 and added Allah anchors(again).
|
||||
|
||||
2007-08-14 21:35 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Tholoth.sfd: Minor positioning fix
|
||||
|
||||
2007-08-14 21:12 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Tholoth.sfd: Added missed U+0647.
|
||||
|
||||
2007-08-14 18:37 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
|
||||
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
|
||||
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
|
||||
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
|
||||
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
|
||||
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
|
||||
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
|
||||
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
|
||||
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Updated the
|
||||
copyright statement, to mention GPL font exception and FreeFonts
|
||||
project.
|
||||
|
||||
2007-08-13 22:18 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlManzomah.sfd,
|
||||
ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd,
|
||||
ae_Arab.sfd, ae_Cortoba.sfd, ae_Electron.sfd, ae_Furat.sfd,
|
||||
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
|
||||
ae_Hor.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Mashq-Bold.sfd,
|
||||
ae_Mashq.sfd, ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd,
|
||||
ae_Ostorah.sfd, ae_Ouhod-Bold.sfd, ae_Petra.sfd,
|
||||
ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd,
|
||||
ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd:
|
||||
* Add missed mark2mark anchors in the affected files, though we
|
||||
aren't going to use this on the long run, but I'll leave that task
|
||||
for 2.1 .
|
||||
* Reencoded all files to unicode glyph map.
|
||||
|
||||
2007-08-13 14:47 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Petra.sfd, ae_Shado.sfd: ae_Petra.sfd, ae_Shado.sfd:
|
||||
Full support for diacritics positioning by Osama Khalid.
|
||||
|
||||
2007-08-13 10:38 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Hor.sfd, ae_Sharjah.sfd:
|
||||
* ae_Hor: Full support for diacritics positioning by Fahd.
|
||||
* ae_Sharjah: Full support for diacritics positioning by Fahd.
|
||||
|
||||
2007-08-13 05:34 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/: ae_Nice.sfd, ae_Tarablus.sfd: Full diacritics supports,
|
||||
needs a check
|
||||
|
||||
2007-08-13 05:24 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Nagham.sfd: Full diacritics supports, needs a check
|
||||
|
||||
2007-08-13 05:08 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Haramain.sfd: Full diacritics supports, needs a check
|
||||
|
||||
2007-08-13 04:42 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Graph.sfd: Full diacritics supports, needs a check
|
||||
|
||||
2007-08-13 04:38 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Granada.sfd: Full diacritics supports, needs a check
|
||||
|
||||
2007-08-13 03:28 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Ostorah.sfd: ae_Ostorah.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-08-13 02:13 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Haramain.sfd: Done: replaced ugly marks, repositioned
|
||||
below marks
|
||||
|
||||
2007-08-13 01:31 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Graph.sfd: Done, needs to be checked
|
||||
|
||||
2007-08-13 01:16 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Granada.sfd: Done, needs to be checked
|
||||
|
||||
2007-08-12 23:05 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/: ae_Tarablus.sfd: First steps
|
||||
|
||||
2007-08-12 18:24 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Electron.sfd: ae_Electron.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-08-12 16:06 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Hani.sfd: ae_Hani.sfd: Full support for diacritic
|
||||
positioning by Osama Khaled
|
||||
|
||||
2007-08-11 23:33 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Ouhod-Bold.sfd: ae_Ouhod-Bold.sfd: Full support for
|
||||
diacritic positioning.
|
||||
|
||||
2007-08-11 21:28 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Rasheeq-Bold.sfd: ae_Rasheeq-Bold.sfd: Full diacritic
|
||||
support.
|
||||
|
||||
2007-08-11 15:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Hor.sfd: some fixes
|
||||
|
||||
2007-08-11 14:55 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd,
|
||||
ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Rasheeq-Bold.sfd, ae_Shado.sfd,
|
||||
ae_Sharjah.sfd, ae_Tarablus.sfd: More tweaking, it is ready for
|
||||
manual editing now (I hope so).
|
||||
|
||||
2007-08-11 11:08 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Hor.sfd: Fahd: I updated the anchor points, please use
|
||||
this instead of the old version.
|
||||
|
||||
2007-08-11 10:45 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Electron.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd,
|
||||
ae_Haramain.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
|
||||
ae_Shado.sfd, ae_Sharjah.sfd, ae_Tarablus.sfd: Replaced old
|
||||
anchor points with new ones and better automatic positioning using
|
||||
the improved addanchors.pe script. Please update your local copy
|
||||
before doing any further work, this will make our life easier.
|
||||
|
||||
2007-08-11 10:25 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/addanchors.pe: Now X and Y values are computed to produce a
|
||||
far better result, the needed manual tweaking is very little now.
|
||||
|
||||
2007-08-10 01:27 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Nada.sfd: ae_Nada.sfd: Full support for diacritic
|
||||
positioning by Fahd AlSaidi.
|
||||
|
||||
2007-08-07 23:47 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlYarmook.sfd:
|
||||
* ae_AlYarmook.sfd: Changed font name and other related feilds from
|
||||
AlYermook to AlYarmook
|
||||
* ae_AlYarmook.sfd: Full support for diacritic positioning.
|
||||
|
||||
2007-08-07 00:22 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Mashq-Bold.sfd: sfd/ae_Mashq-Bold.sfd: Full support for
|
||||
diacritic positioning.
|
||||
|
||||
2007-08-06 02:58 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Rehan.sfd: Mark to mark ligatures were too close, fixed.
|
||||
|
||||
2007-08-04 20:14 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Rehan.sfd: ae_Rehan.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-08-04 01:22 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Mashq.sfd: ae_Mashq.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-08-04 01:19 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Khalid.sfd: Reencoded the file to Unicode.
|
||||
|
||||
2007-08-04 01:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: Fixed ArabicMark2MarkBelow anchor point.
|
||||
Reencoded the file to Unicode.
|
||||
|
||||
2007-08-03 06:12 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: Fixed two letters ligatures diacritics
|
||||
|
||||
2007-08-03 05:55 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: Added لله ligature diacritics
|
||||
|
||||
2007-08-03 05:01 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: Ignore combining marks set
|
||||
|
||||
2007-08-03 04:51 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: Full diacritics support -
|
||||
ArabicMark2MarkBelow need to be checked
|
||||
|
||||
2007-08-03 02:40 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Salem.sfd: Added and positioned anchors for Allah glyph.
|
||||
|
||||
2007-08-03 02:32 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Dimnah.sfd: ae_Dimnah.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-08-03 01:26 Youssef Chahibi <chahibi@gmail.com>
|
||||
|
||||
* sfd/ae_Kayrawan.sfd: First steps in font editing
|
||||
|
||||
2007-08-03 00:10 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Salem.sfd: ae_Salem.sfd: Full diacritic support.
|
||||
|
||||
2007-08-02 04:50 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Arab.sfd: Fixed ligatures anchor points.
|
||||
|
||||
2007-08-02 02:15 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Arab.sfd: Support for diacritic positioning by Osama
|
||||
Khalid.
|
||||
|
||||
2007-08-01 23:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlManzomah.sfd: ae_AlManzomah.sfd: Full support for
|
||||
diacritic positioning.
|
||||
|
||||
2007-08-01 01:56 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Khalid.sfd: ae_Khalid.sfd: Full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-07-28 11:43 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMateen-Bold.sfd: ae_AlMateen-Bold.sfd: Full support for
|
||||
diacritic positioning.
|
||||
|
||||
2007-07-27 22:16 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* Makefile: New make targets as requested by KhaledHosney.
|
||||
|
||||
2007-07-27 21:04 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlHor.sfd: ae_AlHor.sfd: Full diacritic support
|
||||
|
||||
2007-07-26 10:14 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Jet.sfd: ./sfd/ae_Jet.sfd: Full diacritic support.
|
||||
|
||||
2007-07-26 01:38 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Japan.sfd: Aeif, you forgot the ligatures and letter beh
|
||||
isolated, fixed
|
||||
|
||||
2007-07-25 14:41 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Metal.sfd: Add anchor points for لله ligature
|
||||
|
||||
2007-07-25 12:52 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Metal.sfd: ae_Metal: Full diacritic support.
|
||||
|
||||
2007-07-25 01:36 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Japan.sfd: ae_Japan: Full diacritic support.
|
||||
|
||||
2007-07-25 01:28 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Cortoba.sfd: minor fix
|
||||
|
||||
2007-07-25 00:24 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Cortoba.sfd:
|
||||
|
||||
----------------------------------------------------------------------ae_Cortoba.sfd: Full support for diacritic positioning.
|
||||
|
||||
2007-07-24 18:34 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/generate.sh: not needed any more, use 'make' instead
|
||||
|
||||
2007-07-24 18:31 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Sindbad.sfd: Add anchor points for لله ligature
|
||||
|
||||
2007-07-24 18:04 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Fixed ligatures anchor points
|
||||
|
||||
2007-07-24 17:55 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Furat.sfd: Add anchor points for لله ligature
|
||||
|
||||
2007-07-23 23:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* README, README.cvs:
|
||||
- new readme file to explain how to build ttf onts from our cvs
|
||||
tree.
|
||||
|
||||
2007-07-23 23:01 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlBattar.sfd: few fixes in the diacritic positions
|
||||
|
||||
2007-07-23 13:56 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlBattar.sfd: ae_AlBattar.sfd, full support for diacritic
|
||||
positioning.
|
||||
|
||||
2007-07-23 05:28 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* Makefile: Now doesn't rebuild untouched fonts, should save some
|
||||
server cycles.
|
||||
|
||||
2007-07-23 04:00 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Sindbad.sfd: Unchecked 'compact' option
|
||||
|
||||
2007-07-23 00:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Sindbad.sfd:
|
||||
- Add the missed "Ignore Combining Marks" feature to Arabic liga
|
||||
lookuptable, Afief please remember this.
|
||||
- Few changes in ArabicBelow anchor points placement.
|
||||
|
||||
2007-07-22 14:42 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlBattar.sfd: Diacritic support, for isolated glyphs only.
|
||||
|
||||
2007-07-22 00:43 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Sindbad.sfd: Full support for diacritic positioning.
|
||||
|
||||
2007-07-21 21:38 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* Makefile: fixed "clean" to remove the bzipped archive.
|
||||
|
||||
2007-07-21 21:34 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* Makefile:
|
||||
- All files are under ae_fonts dir now.
|
||||
- The archive is bzipped.
|
||||
|
||||
2007-07-21 20:05 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* Makefile: Committed the Makefile. Hope you like it.
|
||||
|
||||
2007-07-21 19:11 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/generate.pe: Add a usage note.
|
||||
|
||||
2007-07-21 19:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/generate.pe: Now accepts a 2nd argument for the .ttf file
|
||||
name.
|
||||
|
||||
2007-07-21 18:52 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Tholoth.sfd: A few fixes in positioning.
|
||||
|
||||
2007-07-21 16:48 Afief Halumi <afief.h@gmail.com>
|
||||
|
||||
* sfd/ae_Tholoth.sfd: Finished work on ae_Tholoth.sfd; Added a few
|
||||
better glyphs and full support for diacritic positioning.
|
||||
|
||||
2007-07-21 00:04 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Tholoth.sfd:
|
||||
|
||||
Diacritics work by afief
|
||||
|
||||
2007-07-19 23:49 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/addanchors.pe: Add support for mark2glyph anchor points,
|
||||
thanks George Williams for fixing fontforge's bug.
|
||||
|
||||
2007-07-19 23:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd,
|
||||
ae_AlMateen-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
|
||||
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Granada.sfd,
|
||||
ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd, ae_Hor.sfd,
|
||||
ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd, ae_Khalid.sfd,
|
||||
ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd, ae_Nada.sfd,
|
||||
ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd,
|
||||
ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd,
|
||||
ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd, ae_Tarablus.sfd,
|
||||
ae_Tholoth.sfd:
|
||||
|
||||
- Removed Cyrillic and Greek glyphs, this makes the font more
|
||||
lighter.
|
||||
- Add all needed anchor points, still needs to be manually adjusted.
|
||||
|
||||
2007-07-19 23:15 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlMohanad.sfd, ae_AlMothnna-Bold.sfd, ae_Furat.sfd:
|
||||
Removed Cyrillic and Greek glyphs, this makes the font more lighter.
|
||||
|
||||
2007-07-19 23:12 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: full support for diacritic positioning
|
||||
|
||||
2007-07-18 14:57 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd:
|
||||
|
||||
Full mark2base and mark2mark anchor points
|
||||
|
||||
2007-07-16 20:53 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Nada.sfd:
|
||||
|
||||
Removed obsolete reference to Btstream copyright, we don't include
|
||||
any Bitstream copyrighted glyphs anymore.
|
||||
|
||||
2007-07-16 20:03 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe:
|
||||
|
||||
use "#!/usr/bin/env fontforge" instead of "#!/usr/bin/fontforge"
|
||||
|
||||
2007-07-16 13:47 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMohanad.sfd:
|
||||
|
||||
Full support for proper diacritics positioning
|
||||
|
||||
2007-07-16 00:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/: addanchors.pe, addlookups.pe, cp.pe, generate.pe: Now the
|
||||
scripts require Fotforge 20070501 or newer, older versions use older
|
||||
SFD formate which we don't suport.
|
||||
|
||||
2007-07-16 00:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: Add support for proper diacritic
|
||||
positioning by Afief Halumi, still in progress
|
||||
|
||||
2007-07-15 23:48 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Furat.sfd: full support for diacritic positioning
|
||||
|
||||
2007-07-15 20:08 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlBattar.sfd, ae_AlHor.sfd, ae_AlManzomah.sfd,
|
||||
ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd, ae_AlYarmook.sfd,
|
||||
ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd,
|
||||
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
|
||||
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
|
||||
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
|
||||
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
|
||||
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
|
||||
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: removed traces
|
||||
of ae_ prefix
|
||||
|
||||
2007-07-15 19:44 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlArabiya.sfd: removed traces of ae_ prefix
|
||||
|
||||
2007-07-13 20:14 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd:
|
||||
- Removed traces of ae_ prefix.
|
||||
- Full support for proper Arabic diacritics positioning.
|
||||
|
||||
2007-07-13 19:38 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Furat.sfd:
|
||||
- Removed traces of ae_ prefix.
|
||||
- add anchor points for Arabic diacritics, needs manual tuning.
|
||||
|
||||
2007-07-13 19:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/: addanchors.pe, addlookups.pe: scripts to assist adding
|
||||
lookup tables and anchor points needed for proper diacritics
|
||||
(harakat) support.
|
||||
|
||||
2007-07-01 03:31 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
|
||||
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
|
||||
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
|
||||
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
|
||||
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
|
||||
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
|
||||
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
|
||||
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
|
||||
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Removed ae_
|
||||
prefix from all fonts, see
|
||||
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=361965
|
||||
|
||||
2007-06-30 22:02 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* README: Initial README file
|
||||
|
||||
2007-06-30 20:20 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/: generate.pe, generate.sh: Scripts to generate TTF files
|
||||
from SFD ones.
|
||||
|
||||
2007-06-30 19:58 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Tarablus.sfd: add the missed U+F6BE that caused bug in 'j'
|
||||
glyph, CVS_SILENT
|
||||
|
||||
2007-06-30 19:48 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Sindbad.sfd:
|
||||
add the missed U+F6BE that caused bug in 'j' glyph, CVS_SILENT
|
||||
|
||||
2007-06-23 22:29 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Shado.sfd, ae_Sharjah.sfd: add the missed U+F6BE that
|
||||
caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:26 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Rasheeq-Bold.sfd, ae_Rehan.sfd, ae_Salem.sfd: add the
|
||||
missed U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:22 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Nice.sfd, ae_Ostorah.sfd, ae_Ouhod-Bold.sfd,
|
||||
ae_Petra.sfd: add the missed U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:19 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Metal.sfd, ae_Nada.sfd, ae_Nagham.sfd: add the missed
|
||||
U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:16 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
|
||||
ae_Mashq.sfd: add the missed U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:12 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd: add
|
||||
the missed U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:09 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd: add the missed
|
||||
U+F6BE that caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:05 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Electron.sfd, ae_Furat.sfd: add the missed U+F6BE that
|
||||
caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 22:02 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Cortoba.sfd, ae_Dimnah.sfd: add the missed U+F6BE that
|
||||
caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 21:59 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlYarmook.sfd, ae_Arab.sfd: add the missed U+F6BE that
|
||||
caused bug in 'j' glyph
|
||||
|
||||
2007-06-23 21:19 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
|
||||
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlMothnna-Bold.sfd: Added the missed U+U+F6BE glyphs which
|
||||
caused a bug in "j" glyph
|
||||
|
||||
2007-06-23 18:30 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* COPYING: -Moved GPL to a separate file. -Added GPL font
|
||||
exception to COPYING.
|
||||
|
||||
2007-06-23 18:12 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_Tholoth.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 18:07 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Shado.sfd, ae_Sharjah.sfd, ae_Sindbad.sfd,
|
||||
ae_Tarablus.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 18:04 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Petra.sfd, ae_Rasheeq-Bold.sfd, ae_Rehan.sfd,
|
||||
ae_Salem.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 18:01 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:57 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Metal.sfd, ae_Nada.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:54 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Kayrawan.sfd, ae_Khalid.sfd, ae_Mashq-Bold.sfd,
|
||||
ae_Mashq.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:51 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Haramain.sfd, ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:47 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Furat.sfd, ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:43 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_Arab.sfd, ae_Cortoba.sfd, ae_Dimnah.sfd,
|
||||
ae_Electron.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:40 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-23 17:37 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
|
||||
ae_AlManzomah.sfd:
|
||||
- New glyphs (covering every thing outside Arabic block) based on
|
||||
the GPL'd FreeFont project [http://www.nongnu.org/freefont/].
|
||||
- Arabic diacritic marks (harakat) are set to have zero advance
|
||||
width and OT class as 'mark' nstead of 'base glyph'
|
||||
|
||||
2007-06-21 05:57 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* tools/cp.pe: Simple ff script to copy a specific range of glyphs
|
||||
from on font to another.
|
||||
|
||||
2007-06-16 01:54 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd:
|
||||
- Identical glyphs (or parts of glyphs) are referenced to one common
|
||||
glyph instead of copying the same shape each time.
|
||||
- Add few missed Arabic glyphs, DOTLESS QAF, DOTLESS BEH, HAMZA
|
||||
ABOVE, HAMZA BELOW and EXTENDED ARABIC-INDIC DIGIT ZERO, ONE, TWO,
|
||||
THREE, SEVEN, EIGHT, NINE.
|
||||
|
||||
2007-06-15 07:10 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/: ae_AlArabiya.sfd, ae_AlBattar.sfd, ae_AlHor.sfd,
|
||||
ae_AlManzomah.sfd, ae_AlMateen-Bold.sfd, ae_AlMohanad.sfd,
|
||||
ae_AlMothnna-Bold.sfd, ae_AlYarmook.sfd, ae_Arab.sfd,
|
||||
ae_Cortoba.sfd, ae_Dimnah.sfd, ae_Electron.sfd, ae_Furat.sfd,
|
||||
ae_Granada.sfd, ae_Graph.sfd, ae_Hani.sfd, ae_Haramain.sfd,
|
||||
ae_Hor.sfd, ae_Japan.sfd, ae_Jet.sfd, ae_Kayrawan.sfd,
|
||||
ae_Khalid.sfd, ae_Mashq-Bold.sfd, ae_Mashq.sfd, ae_Metal.sfd,
|
||||
ae_Nada.sfd, ae_Nagham.sfd, ae_Nice.sfd, ae_Ostorah.sfd,
|
||||
ae_Ouhod-Bold.sfd, ae_Petra.sfd, ae_Rasheeq-Bold.sfd,
|
||||
ae_Rehan.sfd, ae_Salem.sfd, ae_Shado.sfd, ae_Sharjah.sfd,
|
||||
ae_Sindbad.sfd, ae_Tarablus.sfd, ae_Tholoth.sfd: Preparing to
|
||||
work
|
||||
|
||||
2007-06-02 21:25 Khaled Hosny <khaledhosny@eglug.org>
|
||||
|
||||
* sfd/ae_AlMothnna-Bold.sfd:
|
||||
- A modified version of "AlMothnna", partially fixes the vowel marks
|
||||
issues.
|
||||
- This is fontforg's sfd file.
|
||||
|
||||
2004-07-10 09:48 nadim
|
||||
|
||||
* COPYING: + Minor mods to the GPL license mention (their address
|
||||
changed) + Added disclaimer + Renamed file from license.txt for
|
||||
consistency
|
||||
|
||||
58
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/README
vendored
Normal file
58
vendor/tecnickcom/tcpdf/fonts/ae_fonts_2.0/README
vendored
Normal file
@ -0,0 +1,58 @@
|
||||
This project aims at increasing the number of available Arabic free and
|
||||
open source fonts. The goals of this project are,
|
||||
|
||||
* Create and/or salvage high quality free and open TTF Arabic fonts.
|
||||
|
||||
* Create a central repository of all free and open source Arabic fonts
|
||||
(TTF and otherwise) in order to get them included into the various
|
||||
distributions.
|
||||
|
||||
* To better couple and artistically match Arabic fonts to their latin
|
||||
counterparts.
|
||||
|
||||
You can visit our web page
|
||||
http://www.arabeyes.org/project.php?proj=Khotot
|
||||
|
||||
This software package/product and attached documentations are provided
|
||||
"as is", with no warranty.
|
||||
|
||||
-* www.arabeyes.org *-
|
||||
|
||||
If you'd like to help the Arabeyes Project, then consider:
|
||||
|
||||
http://www.arabeyes.org/donate.php
|
||||
|
||||
Typeface and data © 2003-2007, Arabeyes.org.
|
||||
|
||||
Latin glyphs (U+0021-U+007E, U+00A1-U+0237, U+1E00-U+1EF9 and
|
||||
U+FB00-U+FB06 Unicode ranges) are based on "Free UCS Outline Fonts",
|
||||
www.nongnu.org/freefont (Copyleft 2002, 2003, 2005 Free Software
|
||||
Foundation).
|
||||
|
||||
These fonts are subject to the GNU GENERAL PUBLIC (GPL) LICENSE (Version 2).
|
||||
See COPYING for details or http://www.gnu.org/copyleft/gpl.html
|
||||
|
||||
As a special exception, if you create a document which uses this
|
||||
font, and embed this font or unaltered portions of this font into the
|
||||
document, this font does not by itself cause the resulting document to
|
||||
be covered by the GNU General Public License. This exception does not
|
||||
however invalidate any other reasons why the document might be covered
|
||||
by the GNU General Public License. If you modify this font, you may
|
||||
extend this exception to your version of the font, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this exception
|
||||
statement from your version.
|
||||
|
||||
Release Notes
|
||||
-------------
|
||||
2.0
|
||||
This the second major release of Arabeyes fonts, this release features:
|
||||
* Completely new Latin Glyphs, based on font distributed by FreeFonts project
|
||||
(See the legal notes above)
|
||||
* Proper support for Arabic diacritics; all fonts now have anchor points
|
||||
adjusted manually to fit nicely with each glyph.
|
||||
* Diacritics for AlMothnna, AlArabiya and Tholoth fonts have been redisigned
|
||||
too look better and fit with the style of the font.
|
||||
* We dropped ae_ prefix from all fonts, so please fix your configuration
|
||||
files.
|
||||
* Various other small fixes, see ChangeLog file for details.
|
||||
|
||||
BIN
vendor/tecnickcom/tcpdf/fonts/aealarabiya.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/aealarabiya.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/aealarabiya.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/aealarabiya.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/aealarabiya.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/aealarabiya.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/aefurat.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/aefurat.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/aefurat.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/aefurat.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/aefurat.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/aefurat.z
vendored
Normal file
Binary file not shown.
17
vendor/tecnickcom/tcpdf/fonts/cid0cs.php
vendored
Normal file
17
vendor/tecnickcom/tcpdf/fonts/cid0cs.php
vendored
Normal file
File diff suppressed because one or more lines are too long
17
vendor/tecnickcom/tcpdf/fonts/cid0ct.php
vendored
Normal file
17
vendor/tecnickcom/tcpdf/fonts/cid0ct.php
vendored
Normal file
File diff suppressed because one or more lines are too long
17
vendor/tecnickcom/tcpdf/fonts/cid0jp.php
vendored
Normal file
17
vendor/tecnickcom/tcpdf/fonts/cid0jp.php
vendored
Normal file
File diff suppressed because one or more lines are too long
17
vendor/tecnickcom/tcpdf/fonts/cid0kr.php
vendored
Normal file
17
vendor/tecnickcom/tcpdf/fonts/cid0kr.php
vendored
Normal file
File diff suppressed because one or more lines are too long
12
vendor/tecnickcom/tcpdf/fonts/courier.php
vendored
Normal file
12
vendor/tecnickcom/tcpdf/fonts/courier.php
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// TCPDF FONT FILE DESCRIPTION
|
||||
$type='core';
|
||||
$name='Courier';
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$dw=600;
|
||||
$diff='';
|
||||
$enc='';
|
||||
$desc=array('Flags'=>33,'FontBBox'=>'[-23 -250 715 805]','ItalicAngle'=>0,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
|
||||
$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
|
||||
// --- EOF ---
|
||||
12
vendor/tecnickcom/tcpdf/fonts/courierb.php
vendored
Normal file
12
vendor/tecnickcom/tcpdf/fonts/courierb.php
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// TCPDF FONT FILE DESCRIPTION
|
||||
$type='core';
|
||||
$name='Courier-Bold';
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$dw=600;
|
||||
$diff='';
|
||||
$enc='';
|
||||
$desc=array('Flags'=>33,'FontBBox'=>'[-113 -250 749 801]','ItalicAngle'=>0,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
|
||||
$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
|
||||
// --- EOF ---
|
||||
12
vendor/tecnickcom/tcpdf/fonts/courierbi.php
vendored
Normal file
12
vendor/tecnickcom/tcpdf/fonts/courierbi.php
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// TCPDF FONT FILE DESCRIPTION
|
||||
$type='core';
|
||||
$name='Courier-BoldOblique';
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$dw=600;
|
||||
$diff='';
|
||||
$enc='';
|
||||
$desc=array('Flags'=>97,'FontBBox'=>'[-57 -250 869 801]','ItalicAngle'=>-12,'Ascent'=>801,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>439,'StemV'=>106,'StemH'=>84,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
|
||||
$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
|
||||
// --- EOF ---
|
||||
12
vendor/tecnickcom/tcpdf/fonts/courieri.php
vendored
Normal file
12
vendor/tecnickcom/tcpdf/fonts/courieri.php
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?php
|
||||
// TCPDF FONT FILE DESCRIPTION
|
||||
$type='core';
|
||||
$name='Courier-Oblique';
|
||||
$up=-100;
|
||||
$ut=50;
|
||||
$dw=600;
|
||||
$diff='';
|
||||
$enc='';
|
||||
$desc=array('Flags'=>97,'FontBBox'=>'[-27 -250 849 805]','ItalicAngle'=>-12,'Ascent'=>805,'Descent'=>-250,'Leading'=>0,'CapHeight'=>562,'XHeight'=>426,'StemV'=>51,'StemH'=>51,'AvgWidth'=>600,'MaxWidth'=>600,'MissingWidth'=>600);
|
||||
$cw=array(0=>600,1=>600,2=>600,3=>600,4=>600,5=>600,6=>600,7=>600,8=>600,9=>600,10=>600,11=>600,12=>600,13=>600,14=>600,15=>600,16=>600,17=>600,18=>600,19=>600,20=>600,21=>600,22=>600,23=>600,24=>600,25=>600,26=>600,27=>600,28=>600,29=>600,30=>600,31=>600,32=>600,33=>600,34=>600,35=>600,36=>600,37=>600,38=>600,39=>600,40=>600,41=>600,42=>600,43=>600,44=>600,45=>600,46=>600,47=>600,48=>600,49=>600,50=>600,51=>600,52=>600,53=>600,54=>600,55=>600,56=>600,57=>600,58=>600,59=>600,60=>600,61=>600,62=>600,63=>600,64=>600,65=>600,66=>600,67=>600,68=>600,69=>600,70=>600,71=>600,72=>600,73=>600,74=>600,75=>600,76=>600,77=>600,78=>600,79=>600,80=>600,81=>600,82=>600,83=>600,84=>600,85=>600,86=>600,87=>600,88=>600,89=>600,90=>600,91=>600,92=>600,93=>600,94=>600,95=>600,96=>600,97=>600,98=>600,99=>600,100=>600,101=>600,102=>600,103=>600,104=>600,105=>600,106=>600,107=>600,108=>600,109=>600,110=>600,111=>600,112=>600,113=>600,114=>600,115=>600,116=>600,117=>600,118=>600,119=>600,120=>600,121=>600,122=>600,123=>600,124=>600,125=>600,126=>600,127=>600,128=>600,129=>600,130=>600,131=>600,132=>600,133=>600,134=>600,135=>600,136=>600,137=>600,138=>600,139=>600,140=>600,141=>600,142=>600,143=>600,144=>600,145=>600,146=>600,147=>600,148=>600,149=>600,150=>600,151=>600,152=>600,153=>600,154=>600,155=>600,156=>600,157=>600,158=>600,159=>600,160=>600,161=>600,162=>600,163=>600,164=>600,165=>600,166=>600,167=>600,168=>600,169=>600,170=>600,171=>600,172=>600,173=>600,174=>600,175=>600,176=>600,177=>600,178=>600,179=>600,180=>600,181=>600,182=>600,183=>600,184=>600,185=>600,186=>600,187=>600,188=>600,189=>600,190=>600,191=>600,192=>600,193=>600,194=>600,195=>600,196=>600,197=>600,198=>600,199=>600,200=>600,201=>600,202=>600,203=>600,204=>600,205=>600,206=>600,207=>600,208=>600,209=>600,210=>600,211=>600,212=>600,213=>600,214=>600,215=>600,216=>600,217=>600,218=>600,219=>600,220=>600,221=>600,222=>600,223=>600,224=>600,225=>600,226=>600,227=>600,228=>600,229=>600,230=>600,231=>600,232=>600,233=>600,234=>600,235=>600,236=>600,237=>600,238=>600,239=>600,240=>600,241=>600,242=>600,243=>600,244=>600,245=>600,246=>600,247=>600,248=>600,249=>600,250=>600,251=>600,252=>600,253=>600,254=>600,255=>600);
|
||||
// --- EOF ---
|
||||
53
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/AUTHORS
vendored
Normal file
53
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/AUTHORS
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
abysta at yandex.ru
|
||||
Adrian Schroeter
|
||||
Aleksey Chalabyan
|
||||
Andrey Valentinovich Panov
|
||||
Ben Laenen
|
||||
Besarion Gugushvili
|
||||
Bhikkhu Pesala
|
||||
Clayborne Arevalo
|
||||
Dafydd Harries
|
||||
Danilo Segan
|
||||
Davide Viti
|
||||
David Jez
|
||||
David Lawrence Ramsey
|
||||
Denis Jacquerye
|
||||
Dwayne Bailey
|
||||
Eugeniy Meshcheryakov
|
||||
Gee Fung Sit
|
||||
Heikki Lindroos
|
||||
James Cloos
|
||||
James Crippen
|
||||
John Karp
|
||||
Keenan Pepper
|
||||
Lars Naesbye Christensen
|
||||
Lior Halphon
|
||||
MaEr
|
||||
Mashrab Kuvatov
|
||||
Max Berger
|
||||
Mederic Boquien
|
||||
Michael Everson
|
||||
MihailJP
|
||||
Misu Moldovan
|
||||
Nguyen Thai Ngoc Duy
|
||||
Nicolas Mailhot
|
||||
Norayr Chilingarian
|
||||
Ognyan Kulev
|
||||
Ondrej Koala Vacha
|
||||
Peter Cernak
|
||||
Remy Oudompheng
|
||||
Roozbeh Pournader
|
||||
Rouben Hakobian
|
||||
Sahak Petrosyan
|
||||
Sander Vesik
|
||||
Stepan Roh
|
||||
Stephen Hartke
|
||||
Steve Tinney
|
||||
Tavmjong Bah
|
||||
Thomas Henlich
|
||||
Tim May
|
||||
Valentin Stoykov
|
||||
Vasek Stodulka
|
||||
Wesley Transue
|
||||
|
||||
$Id: AUTHORS 2461 2011-02-18 16:38:20Z ben_laenen $
|
||||
3
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/BUGS
vendored
Normal file
3
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/BUGS
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
See http://dejavu.sourceforge.net/wiki/index.php/Bugs
|
||||
|
||||
$Id: BUGS 80 2004-11-13 13:12:02Z src $
|
||||
99
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/LICENSE
vendored
Normal file
99
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/LICENSE
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||
a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute the
|
||||
Font Software, including without limitation the rights to use, copy, merge,
|
||||
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice shall
|
||||
be included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||
are renamed to names not containing either the words "Bitstream" or the word
|
||||
"Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or Font
|
||||
Software that has been modified and is distributed under the "Bitstream
|
||||
Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but no
|
||||
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||
FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
||||
|
||||
Arev Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the fonts accompanying this license ("Fonts") and
|
||||
associated documentation files (the "Font Software"), to reproduce
|
||||
and distribute the modifications to the Bitstream Vera Font Software,
|
||||
including without limitation the rights to use, copy, merge, publish,
|
||||
distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be included in all copies of one or more of the Font Software
|
||||
typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in
|
||||
particular the designs of glyphs or characters in the Fonts may be
|
||||
modified and additional glyphs or characters may be added to the
|
||||
Fonts, only if the fonts are renamed to names not containing either
|
||||
the words "Tavmjong Bah" or the word "Arev".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts
|
||||
or Font Software that has been modified and is distributed under the
|
||||
"Tavmjong Bah Arev" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy of one or more of the Font Software typefaces may be sold by
|
||||
itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of Tavmjong Bah shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Font Software without prior written authorization
|
||||
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||
. fr.
|
||||
|
||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
|
||||
1315
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/NEWS
vendored
Normal file
1315
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/NEWS
vendored
Normal file
File diff suppressed because it is too large
Load Diff
59
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/README
vendored
Normal file
59
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/README
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
DejaVu fonts 2.33 (c)2004-2011 DejaVu fonts team
|
||||
------------------------------------------------
|
||||
|
||||
The DejaVu fonts are a font family based on the Bitstream Vera Fonts
|
||||
(http://gnome.org/fonts/). Its purpose is to provide a wider range of
|
||||
characters (see status.txt for more information) while maintaining the
|
||||
original look and feel.
|
||||
|
||||
DejaVu fonts are based on Bitstream Vera fonts version 1.10.
|
||||
|
||||
Available fonts (Sans = sans serif, Mono = monospaced):
|
||||
|
||||
DejaVu Sans Mono
|
||||
DejaVu Sans Mono Bold
|
||||
DejaVu Sans Mono Bold Oblique
|
||||
DejaVu Sans Mono Oblique
|
||||
DejaVu Sans
|
||||
DejaVu Sans Bold
|
||||
DejaVu Sans Bold Oblique
|
||||
DejaVu Sans Oblique
|
||||
DejaVu Sans ExtraLight (experimental)
|
||||
DejaVu Serif
|
||||
DejaVu Serif Bold
|
||||
DejaVu Serif Bold Italic (experimental)
|
||||
DejaVu Serif Italic (experimental)
|
||||
DejaVu Sans Condensed (experimental)
|
||||
DejaVu Sans Condensed Bold (experimental)
|
||||
DejaVu Sans Condensed Bold Oblique (experimental)
|
||||
DejaVu Sans Condensed Oblique (experimental)
|
||||
DejaVu Serif Condensed (experimental)
|
||||
DejaVu Serif Condensed Bold (experimental)
|
||||
DejaVu Serif Condensed Bold Italic (experimental)
|
||||
DejaVu Serif Condensed Italic (experimental)
|
||||
|
||||
All fonts are also available as derivative called DejaVu LGC with support
|
||||
only for Latin, Greek and Cyrillic scripts.
|
||||
|
||||
For license information see LICENSE. What's new is described in NEWS. Known
|
||||
bugs are in BUGS. All authors are mentioned in AUTHORS.
|
||||
|
||||
Fonts are published in source form as SFD files (Spline Font Database from
|
||||
FontForge - http://fontforge.sf.net/) and in compiled form as TTF files
|
||||
(TrueType fonts).
|
||||
|
||||
For more information go to http://dejavu.sourceforge.net/.
|
||||
|
||||
Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah:
|
||||
---------------------------
|
||||
U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223,
|
||||
U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5,
|
||||
U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362,
|
||||
U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9,
|
||||
U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F,
|
||||
U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135,
|
||||
U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704,
|
||||
U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794,
|
||||
U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06
|
||||
|
||||
$Id: README 2471 2011-02-27 14:25:15Z ben_laenen $
|
||||
242
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/langcover.txt
vendored
Normal file
242
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/langcover.txt
vendored
Normal file
@ -0,0 +1,242 @@
|
||||
This is the language coverage file for DejaVu fonts
|
||||
($Id$)
|
||||
|
||||
Sans Serif Sans Mono
|
||||
aa Afar 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90)
|
||||
af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69)
|
||||
ak Akan 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
am Amharic (0/264) (0/264) (0/264)
|
||||
an Aragonese 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
ar Arabic 100% (125/125) (0/125) 100% (125/125)
|
||||
as Assamese (0/64) (0/64) (0/64)
|
||||
ast Asturian/Bable/Leonese/Asturleonese 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
av Avaric 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
ay Aymara 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
az-ir Azerbaijani in Iran 100% (130/130) (0/130) 100% (130/130)
|
||||
ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82)
|
||||
be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32)
|
||||
bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
bh Bihari (Devanagari script) (0/68) (0/68) (0/68)
|
||||
bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68)
|
||||
bi Bislama 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
bm Bambara 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
bn Bengali (0/63) (0/63) (0/63)
|
||||
bo Tibetan (0/95) (0/95) (0/95)
|
||||
br Breton 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
byn Blin/Bilin (0/255) (0/255) (0/255)
|
||||
ca Catalan 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
ce Chechen 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
chr Cherokee (0/85) (0/85) (0/85)
|
||||
co Corsican 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
cs Czech 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
cu Old Church Slavonic 100% (103/103) 86% (89/103) 78% (81/103)
|
||||
cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
cy Welsh 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
da Danish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
de German 100% (59/59) 100% (59/59) 100% (59/59)
|
||||
dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49)
|
||||
dz Dzongkha (0/95) (0/95) (0/95)
|
||||
ee Ewe 100% (99/99) 100% (99/99) 100% (99/99)
|
||||
el Greek 100% (69/69) 100% (69/69) 100% (69/69)
|
||||
en English 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
es Spanish 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
et Estonian 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
eu Basque 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
fa Persian 100% (129/129) (0/129) 100% (129/129)
|
||||
fat Fanti 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
fi Finnish 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
fil Filipino 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
fj Fijian 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
fo Faroese 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
fr French 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
fur Friulian 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
fy Frisian 100% (75/75) 100% (75/75) 100% (75/75)
|
||||
ga Irish 100% (80/80) 100% (80/80) 100% (80/80)
|
||||
gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
gez Ethiopic (Geez) (0/218) (0/218) (0/218)
|
||||
gl Galician 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
gn Guarani 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
gu Gujarati (0/68) (0/68) (0/68)
|
||||
gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
ha Hausa 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63)
|
||||
he Hebrew 100% (27/27) (0/27) (0/27)
|
||||
hi Hindi (Devanagari script) (0/68) (0/68) (0/68)
|
||||
hne Chhattisgarhi (0/68) (0/68) (0/68)
|
||||
ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
hr Croatian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
hy Armenian 100% (77/77) 100% (77/77) 100% (77/77)
|
||||
hz Herero 100% (57/57) 100% (57/57) 100% (57/57)
|
||||
ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
id Indonesian 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ig Igbo 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165)
|
||||
ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
io Ido 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
is Icelandic 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
it Italian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
iu Inuktitut 100% (161/161) (0/161) (0/161)
|
||||
ja Japanese (0/6537) (0/6537) (0/6537)
|
||||
jv Javanese 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
ka Georgian 100% (33/33) 100% (33/33) 100% (33/33)
|
||||
kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77)
|
||||
kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81)
|
||||
km Central Khmer (0/63) (0/63) (0/63)
|
||||
kn Kannada (0/70) (0/70) (0/70)
|
||||
ko Korean (0/2443) (0/2443) (0/2443)
|
||||
kok Kokani (Devanagari script) (0/68) (0/68) (0/68)
|
||||
kr Kanuri 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
ks Kashmiri 98% (143/145) (0/145) 97% (141/145)
|
||||
ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32)
|
||||
ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32)
|
||||
ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
kw Cornish 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
la Latin 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
lah Lahnda 98% (143/145) (0/145) 97% (141/145)
|
||||
lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75)
|
||||
lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
lg Ganda 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ln Lingala 100% (81/81) 100% (81/81) 100% (81/81)
|
||||
lo Lao 100% (55/55) (0/55) 83% (46/55)
|
||||
lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
lv Latvian 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
mai Maithili (Devanagari script) (0/68) (0/68) (0/68)
|
||||
mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
mi Maori 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42)
|
||||
ml Malayalam (0/68) (0/68) (0/68)
|
||||
mn-cn Mongolian in China (0/130) (0/130) (0/130)
|
||||
mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
mr Marathi (Devanagari script) (0/68) (0/68) (0/68)
|
||||
ms Malay 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
mt Maltese 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
my Burmese (Myanmar) (0/48) (0/48) (0/48)
|
||||
na Nauru 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59)
|
||||
ne Nepali (Devanagari script) (0/68) (0/68) (0/68)
|
||||
ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
nl Dutch 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
oc Occitan 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
or Oriya (0/68) (0/68) (0/68)
|
||||
os Ossetic 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
ota Ottoman Turkish 100% (37/37) (0/37) 97% (36/37)
|
||||
pa Panjabi/Punjabi (0/63) (0/63) (0/63)
|
||||
pa-pk Panjabi/Punjabi in Pakistan 98% (143/145) (0/145) 97% (141/145)
|
||||
pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
pl Polish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ps-af Pashto in Afghanistan 95% (47/49) (0/49) 77% (38/49)
|
||||
ps-pk Pashto in Pakistan 93% (46/49) (0/49) 75% (37/49)
|
||||
pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
qu Quechua 100% (55/55) 100% (55/55) 100% (55/55)
|
||||
rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
rn Rundi 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ro Romanian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ru Russian 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68)
|
||||
sah Yakut 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
sco Scots 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
sd Sindhi 100% (54/54) (0/54) 79% (43/54)
|
||||
se North Sami 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
sg Sango 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156)
|
||||
shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48)
|
||||
si Sinhala/Sinhalese (0/73) (0/73) (0/73)
|
||||
sid Sidamo (0/281) (0/281) (0/281)
|
||||
sk Slovak 100% (86/86) 100% (86/86) 100% (86/86)
|
||||
sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
sm Samoan 100% (53/53) 100% (53/53) 100% (53/53)
|
||||
sma South Sami 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80)
|
||||
sn Shona 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
so Somali 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
sq Albanian 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
sr Serbian 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
ss Swati 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
su Sundanese 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
sv Swedish 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
sw Swahili 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
syr Syriac (0/45) (0/45) (0/45)
|
||||
ta Tamil (0/48) (0/48) (0/48)
|
||||
te Telugu (0/70) (0/70) (0/70)
|
||||
tg Tajik 100% (78/78) 100% (78/78) 97% (76/78)
|
||||
th Thai 1% (1/74) (0/74) (0/74)
|
||||
ti-er Eritrean Tigrinya (0/255) (0/255) (0/255)
|
||||
ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281)
|
||||
tig Tigre (0/221) (0/221) (0/221)
|
||||
tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
tn Tswana 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
to Tonga 100% (53/53) 100% (53/53) 100% (53/53)
|
||||
tr Turkish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
tt Tatar 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
tw Twi 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65)
|
||||
tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ug Uighur 100% (125/125) (0/125) 100% (125/125)
|
||||
uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ur Urdu 98% (143/145) (0/145) 97% (141/145)
|
||||
uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ve Venda 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
vi Vietnamese 100% (194/194) 100% (194/194) 76% (148/194)
|
||||
vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
vot Votic 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
wa Walloon 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
wal Wolaitta/Wolaytta (0/281) (0/281) (0/281)
|
||||
wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
wo Wolof 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
yap Yapese 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
yi Yiddish 100% (27/27) (0/27) (0/27)
|
||||
yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119)
|
||||
za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765)
|
||||
zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213)
|
||||
zh-mo Chinese in Macau (0/2213) (0/2213) (0/2213)
|
||||
zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765)
|
||||
zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063)
|
||||
zu Zulu 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
215
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/unicover.txt
vendored
Normal file
215
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.33/unicover.txt
vendored
Normal file
@ -0,0 +1,215 @@
|
||||
This is the Unicode coverage file for DejaVu fonts
|
||||
($Id$)
|
||||
|
||||
Control and similar characters are discounted from totals.
|
||||
|
||||
Sans Serif Sans Mono
|
||||
U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95)
|
||||
U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
U+0180 Latin Extended-B 100% (208/208) 100% (208/208) 86% (180/208)
|
||||
U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+02b0 Spacing Modifier Letters 78% (63/80) 57% (46/80) 60% (48/80)
|
||||
U+0300 Combining Diacritical Marks 83% (93/112) 60% (68/112) 59% (67/112)
|
||||
U+0370 Greek and Coptic 100% (134/134) 89% (120/134) 82% (110/134)
|
||||
U+0400 Cyrillic 100% (256/256) 78% (200/256) 70% (180/256)
|
||||
U+0500 Cyrillic Supplement 95% (38/40) 25% (10/40) 15% (6/40)
|
||||
U+0530 Armenian 100% (86/86) 100% (86/86) 100% (86/86)
|
||||
U+0590 Hebrew 62% (54/87) (0/87) (0/87)
|
||||
U+0600 Arabic 63% (161/252) (0/252) 39% (99/252)
|
||||
U+0700 Syriac (0/77) (0/77) (0/77)
|
||||
U+0750 Arabic Supplement (0/48) (0/48) (0/48)
|
||||
U+0780 Thaana (0/50) (0/50) (0/50)
|
||||
U+07c0 NKo 91% (54/59) (0/59) (0/59)
|
||||
U+0800 Samaritan (0/61) (0/61) (0/61)
|
||||
U+0840 Mandaic (0/29) (0/29) (0/29)
|
||||
U+0900 Devanagari (0/127) (0/127) (0/127)
|
||||
U+0980 Bengali (0/92) (0/92) (0/92)
|
||||
U+0a00 Gurmukhi (0/79) (0/79) (0/79)
|
||||
U+0a80 Gujarati (0/83) (0/83) (0/83)
|
||||
U+0b00 Oriya (0/90) (0/90) (0/90)
|
||||
U+0b80 Tamil (0/72) (0/72) (0/72)
|
||||
U+0c00 Telugu (0/93) (0/93) (0/93)
|
||||
U+0c80 Kannada (0/86) (0/86) (0/86)
|
||||
U+0d00 Malayalam (0/98) (0/98) (0/98)
|
||||
U+0d80 Sinhala (0/80) (0/80) (0/80)
|
||||
U+0e00 Thai 1% (1/87) (0/87) (0/87)
|
||||
U+0e80 Lao 100% (65/65) (0/65) 70% (46/65)
|
||||
U+0f00 Tibetan (0/211) (0/211) (0/211)
|
||||
U+1000 Myanmar (0/160) (0/160) (0/160)
|
||||
U+10a0 Georgian 100% (83/83) 100% (83/83) 54% (45/83)
|
||||
U+1100 Hangul Jamo (0/256) (0/256) (0/256)
|
||||
U+1200 Ethiopic (0/358) (0/358) (0/358)
|
||||
U+1380 Ethiopic Supplement (0/26) (0/26) (0/26)
|
||||
U+13a0 Cherokee (0/85) (0/85) (0/85)
|
||||
U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640)
|
||||
U+1680 Ogham 100% (29/29) (0/29) (0/29)
|
||||
U+16a0 Runic (0/81) (0/81) (0/81)
|
||||
U+1700 Tagalog (0/20) (0/20) (0/20)
|
||||
U+1720 Hanunoo (0/23) (0/23) (0/23)
|
||||
U+1740 Buhid (0/20) (0/20) (0/20)
|
||||
U+1760 Tagbanwa (0/18) (0/18) (0/18)
|
||||
U+1780 Khmer (0/114) (0/114) (0/114)
|
||||
U+1800 Mongolian (0/156) (0/156) (0/156)
|
||||
U+18b0 Unified Canadian Aboriginal Syllabics Extended (0/70) (0/70) (0/70)
|
||||
U+1900 Limbu (0/66) (0/66) (0/66)
|
||||
U+1950 Tai Le (0/35) (0/35) (0/35)
|
||||
U+1980 New Tai Lue (0/83) (0/83) (0/83)
|
||||
U+19e0 Khmer Symbols (0/32) (0/32) (0/32)
|
||||
U+1a00 Buginese (0/30) (0/30) (0/30)
|
||||
U+1a20 Tai Tham (0/127) (0/127) (0/127)
|
||||
U+1b00 Balinese (0/121) (0/121) (0/121)
|
||||
U+1b80 Sundanese (0/55) (0/55) (0/55)
|
||||
U+1bc0 Batak (0/56) (0/56) (0/56)
|
||||
U+1c00 Lepcha (0/74) (0/74) (0/74)
|
||||
U+1c50 Ol Chiki (0/48) (0/48) (0/48)
|
||||
U+1cd0 Vedic Extensions (0/35) (0/35) (0/35)
|
||||
U+1d00 Phonetic Extensions 82% (106/128) 86% (111/128) 48% (62/128)
|
||||
U+1d80 Phonetic Extensions Supplement 59% (38/64) 59% (38/64) 57% (37/64)
|
||||
U+1dc0 Combining Diacritical Marks Supplement 13% (6/43) 13% (6/43) (0/43)
|
||||
U+1e00 Latin Extended Additional 98% (252/256) 98% (252/256) 71% (182/256)
|
||||
U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233)
|
||||
U+2000 General Punctuation 100% (107/107) 81% (87/107) 48% (52/107)
|
||||
U+2070 Superscripts and Subscripts 100% (42/42) 100% (42/42) 100% (42/42)
|
||||
U+20a0 Currency Symbols 92% (24/26) 26% (7/26) 92% (24/26)
|
||||
U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33)
|
||||
U+2100 Letterlike Symbols 93% (75/80) 40% (32/80) 21% (17/80)
|
||||
U+2150 Number Forms 94% (55/58) 94% (55/58) 22% (13/58)
|
||||
U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112)
|
||||
U+2200 Mathematical Operators 100% (256/256) 39% (100/256) 62% (159/256)
|
||||
U+2300 Miscellaneous Technical 26% (65/244) 14% (35/244) 47% (117/244)
|
||||
U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39)
|
||||
U+2440 Optical Character Recognition (0/11) (0/11) (0/11)
|
||||
U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160)
|
||||
U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32)
|
||||
U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+2600 Miscellaneous Symbols 73% (187/256) 11% (30/256) 58% (149/256)
|
||||
U+2700 Dingbats 91% (174/191) 0% (1/191) 75% (144/191)
|
||||
U+27c0 Miscellaneous Mathematical Symbols-A 19% (9/46) 10% (5/46) 10% (5/46)
|
||||
U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) (0/16)
|
||||
U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256)
|
||||
U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128)
|
||||
U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 2% (3/128)
|
||||
U+2a00 Supplemental Mathematical Operators 28% (72/256) 1% (4/256) 0% (1/256)
|
||||
U+2b00 Miscellaneous Symbols and Arrows 40% (35/87) 31% (27/87) 10% (9/87)
|
||||
U+2c00 Glagolitic (0/94) (0/94) (0/94)
|
||||
U+2c60 Latin Extended-C 96% (31/32) 81% (26/32) 43% (14/32)
|
||||
U+2c80 Coptic (0/121) (0/121) (0/121)
|
||||
U+2d00 Georgian Supplement (0/38) 100% (38/38) (0/38)
|
||||
U+2d30 Tifinagh 96% (55/57) (0/57) (0/57)
|
||||
U+2d80 Ethiopic Extended (0/79) (0/79) (0/79)
|
||||
U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32)
|
||||
U+2e00 Supplemental Punctuation 12% (6/50) 12% (6/50) 12% (6/50)
|
||||
U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115)
|
||||
U+2f00 Kangxi Radicals (0/214) (0/214) (0/214)
|
||||
U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12)
|
||||
U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64)
|
||||
U+3040 Hiragana (0/93) (0/93) (0/93)
|
||||
U+30a0 Katakana (0/96) (0/96) (0/96)
|
||||
U+3100 Bopomofo (0/41) (0/41) (0/41)
|
||||
U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94)
|
||||
U+3190 Kanbun (0/16) (0/16) (0/16)
|
||||
U+31a0 Bopomofo Extended (0/27) (0/27) (0/27)
|
||||
U+31c0 CJK Strokes (0/36) (0/36) (0/36)
|
||||
U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16)
|
||||
U+3200 Enclosed CJK Letters and Months (0/254) (0/254) (0/254)
|
||||
U+3300 CJK Compatibility (0/256) (0/256) (0/256)
|
||||
U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0)
|
||||
U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64)
|
||||
U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0)
|
||||
U+a000 Yi Syllables (0/1165) (0/1165) (0/1165)
|
||||
U+a490 Yi Radicals (0/55) (0/55) (0/55)
|
||||
U+a4d0 Lisu (0/48) (0/48) (0/48)
|
||||
U+a500 Vai (0/300) (0/300) (0/300)
|
||||
U+a640 Cyrillic Extended-B 38% (31/80) 12% (10/80) (0/80)
|
||||
U+a6a0 Bamum (0/88) (0/88) (0/88)
|
||||
U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32)
|
||||
U+a720 Latin Extended-D 48% (62/129) 42% (55/129) 10% (14/129)
|
||||
U+a800 Syloti Nagri (0/44) (0/44) (0/44)
|
||||
U+a830 Common Indic Number Forms (0/10) (0/10) (0/10)
|
||||
U+a840 Phags-pa (0/56) (0/56) (0/56)
|
||||
U+a880 Saurashtra (0/81) (0/81) (0/81)
|
||||
U+a8e0 Devanagari Extended (0/28) (0/28) (0/28)
|
||||
U+a900 Kayah Li (0/48) (0/48) (0/48)
|
||||
U+a930 Rejang (0/37) (0/37) (0/37)
|
||||
U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29)
|
||||
U+a980 Javanese (0/91) (0/91) (0/91)
|
||||
U+aa00 Cham (0/83) (0/83) (0/83)
|
||||
U+aa60 Myanmar Extended-A (0/28) (0/28) (0/28)
|
||||
U+aa80 Tai Viet (0/72) (0/72) (0/72)
|
||||
U+ab00 Ethiopic Extended-A (0/33) (0/33) (0/33)
|
||||
U+abc0 Meetei Mayek (0/56) (0/56) (0/56)
|
||||
U+ac00 Hangul Syllables (0/0) (0/0) (0/0)
|
||||
U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72)
|
||||
U+d800 High Surrogates (0/0) (0/0) (0/0)
|
||||
U+db80 High Private Use Surrogates (0/0) (0/0) (0/0)
|
||||
U+dc00 Low Surrogates (0/0) (0/0) (0/0)
|
||||
U+e000 Private Use Area (0/0) (0/0) (0/0)
|
||||
U+f900 CJK Compatibility Ideographs (0/470) (0/470) (0/470)
|
||||
U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58)
|
||||
U+fb50 Arabic Presentation Forms-A 16% (98/611) (0/611) 11% (72/611)
|
||||
U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16)
|
||||
U+fe10 Vertical Forms (0/10) (0/10) (0/10)
|
||||
U+fe20 Combining Half Marks 57% (4/7) (0/7) (0/7)
|
||||
U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32)
|
||||
U+fe50 Small Form Variants (0/26) (0/26) (0/26)
|
||||
U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141)
|
||||
U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225)
|
||||
U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5)
|
||||
U+10000 Linear B Syllabary (0/88) (0/88) (0/88)
|
||||
U+10080 Linear B Ideograms (0/123) (0/123) (0/123)
|
||||
U+10100 Aegean Numbers (0/57) (0/57) (0/57)
|
||||
U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75)
|
||||
U+10190 Ancient Symbols (0/12) (0/12) (0/12)
|
||||
U+101d0 Phaistos Disc (0/46) (0/46) (0/46)
|
||||
U+10280 Lycian (0/29) (0/29) (0/29)
|
||||
U+102a0 Carian (0/49) (0/49) (0/49)
|
||||
U+10300 Old Italic 100% (35/35) (0/35) (0/35)
|
||||
U+10330 Gothic (0/27) (0/27) (0/27)
|
||||
U+10380 Ugaritic (0/31) (0/31) (0/31)
|
||||
U+103a0 Old Persian (0/50) (0/50) (0/50)
|
||||
U+10400 Deseret (0/80) (0/80) (0/80)
|
||||
U+10450 Shavian (0/48) (0/48) (0/48)
|
||||
U+10480 Osmanya (0/40) (0/40) (0/40)
|
||||
U+10800 Cypriot Syllabary (0/55) (0/55) (0/55)
|
||||
U+10840 Imperial Aramaic (0/31) (0/31) (0/31)
|
||||
U+10900 Phoenician (0/29) (0/29) (0/29)
|
||||
U+10920 Lydian (0/27) (0/27) (0/27)
|
||||
U+10a00 Kharoshthi (0/65) (0/65) (0/65)
|
||||
U+10a60 Old South Arabian (0/32) (0/32) (0/32)
|
||||
U+10b00 Avestan (0/61) (0/61) (0/61)
|
||||
U+10b40 Inscriptional Parthian (0/30) (0/30) (0/30)
|
||||
U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27)
|
||||
U+10c00 Old Turkic (0/73) (0/73) (0/73)
|
||||
U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31)
|
||||
U+11000 Brahmi (0/108) (0/108) (0/108)
|
||||
U+11080 Kaithi (0/66) (0/66) (0/66)
|
||||
U+12000 Cuneiform (0/879) (0/879) (0/879)
|
||||
U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103)
|
||||
U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071)
|
||||
U+16800 Bamum Supplement (0/569) (0/569) (0/569)
|
||||
U+1b000 Kana Supplement (0/2) (0/2) (0/2)
|
||||
U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246)
|
||||
U+1d100 Musical Symbols (0/220) (0/220) (0/220)
|
||||
U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70)
|
||||
U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87)
|
||||
U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18)
|
||||
U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 5% (55/996) 6% (62/996)
|
||||
U+1f000 Mahjong Tiles (0/44) (0/44) (0/44)
|
||||
U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100)
|
||||
U+1f0a0 Playing Cards 100% (59/59) (0/59) (0/59)
|
||||
U+1f100 Enclosed Alphanumeric Supplement (0/169) (0/169) (0/169)
|
||||
U+1f200 Enclosed Ideographic Supplement (0/57) (0/57) (0/57)
|
||||
U+1f300 Miscellaneous Symbols And Pictographs 0% (4/529) (0/529) (0/529)
|
||||
U+1f600 Emoticons 80% (51/63) (0/63) (0/63)
|
||||
U+1f680 Transport And Map Symbols (0/70) (0/70) (0/70)
|
||||
U+1f700 Alchemical Symbols (0/116) (0/116) (0/116)
|
||||
U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0)
|
||||
U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0)
|
||||
U+2b740 CJK Unified Ideographs Extension D (0/0) (0/0) (0/0)
|
||||
U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542)
|
||||
U+e0000 Tags (0/98) (0/98) (0/98)
|
||||
U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240)
|
||||
U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0)
|
||||
U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0)
|
||||
54
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/AUTHORS
vendored
Normal file
54
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/AUTHORS
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
abysta at yandex.ru
|
||||
Adrian Schroeter
|
||||
Aleksey Chalabyan
|
||||
Andrey Valentinovich Panov
|
||||
Ben Laenen
|
||||
Besarion Gugushvili
|
||||
Bhikkhu Pesala
|
||||
Clayborne Arevalo
|
||||
Dafydd Harries
|
||||
Danilo Segan
|
||||
Davide Viti
|
||||
David Jez
|
||||
David Lawrence Ramsey
|
||||
Denis Jacquerye
|
||||
Dwayne Bailey
|
||||
Eugeniy Meshcheryakov
|
||||
Gee Fung Sit
|
||||
Heikki Lindroos
|
||||
James Cloos
|
||||
James Crippen
|
||||
John Karp
|
||||
Keenan Pepper
|
||||
Lars Naesbye Christensen
|
||||
Lior Halphon
|
||||
MaEr
|
||||
Mashrab Kuvatov
|
||||
Max Berger
|
||||
Mederic Boquien
|
||||
Michael Everson
|
||||
MihailJP
|
||||
Misu Moldovan
|
||||
Nguyen Thai Ngoc Duy
|
||||
Nicolas Mailhot
|
||||
Norayr Chilingarian
|
||||
Ognyan Kulev
|
||||
Ondrej Koala Vacha
|
||||
Peter Cernak
|
||||
Remy Oudompheng
|
||||
Roozbeh Pournader
|
||||
Rouben Hakobian
|
||||
Sahak Petrosyan
|
||||
Sander Vesik
|
||||
Stepan Roh
|
||||
Stephen Hartke
|
||||
Steve Tinney
|
||||
Tavmjong Bah
|
||||
Thomas Henlich
|
||||
Tim May
|
||||
Valentin Stoykov
|
||||
Vasek Stodulka
|
||||
Wesley Transue
|
||||
Yoshiki Ohshima
|
||||
|
||||
$Id: AUTHORS 2495 2011-11-14 22:56:26Z noct_dreamer $
|
||||
3
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/BUGS
vendored
Normal file
3
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/BUGS
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
See http://dejavu.sourceforge.net/wiki/index.php/Bugs
|
||||
|
||||
$Id: BUGS 80 2004-11-13 13:12:02Z src $
|
||||
99
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE
vendored
Normal file
99
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/LICENSE
vendored
Normal file
@ -0,0 +1,99 @@
|
||||
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||
|
||||
Bitstream Vera Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||
a trademark of Bitstream, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of the fonts accompanying this license ("Fonts") and associated
|
||||
documentation files (the "Font Software"), to reproduce and distribute the
|
||||
Font Software, including without limitation the rights to use, copy, merge,
|
||||
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice shall
|
||||
be included in all copies of one or more of the Font Software typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in particular
|
||||
the designs of glyphs or characters in the Fonts may be modified and
|
||||
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||
are renamed to names not containing either the words "Bitstream" or the word
|
||||
"Vera".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts or Font
|
||||
Software that has been modified and is distributed under the "Bitstream
|
||||
Vera" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but no
|
||||
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||
FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the names of Gnome, the Gnome
|
||||
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||
otherwise to promote the sale, use or other dealings in this Font Software
|
||||
without prior written authorization from the Gnome Foundation or Bitstream
|
||||
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||
org.
|
||||
|
||||
Arev Fonts Copyright
|
||||
------------------------------
|
||||
|
||||
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the fonts accompanying this license ("Fonts") and
|
||||
associated documentation files (the "Font Software"), to reproduce
|
||||
and distribute the modifications to the Bitstream Vera Font Software,
|
||||
including without limitation the rights to use, copy, merge, publish,
|
||||
distribute, and/or sell copies of the Font Software, and to permit
|
||||
persons to whom the Font Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright and trademark notices and this permission notice
|
||||
shall be included in all copies of one or more of the Font Software
|
||||
typefaces.
|
||||
|
||||
The Font Software may be modified, altered, or added to, and in
|
||||
particular the designs of glyphs or characters in the Fonts may be
|
||||
modified and additional glyphs or characters may be added to the
|
||||
Fonts, only if the fonts are renamed to names not containing either
|
||||
the words "Tavmjong Bah" or the word "Arev".
|
||||
|
||||
This License becomes null and void to the extent applicable to Fonts
|
||||
or Font Software that has been modified and is distributed under the
|
||||
"Tavmjong Bah Arev" names.
|
||||
|
||||
The Font Software may be sold as part of a larger software package but
|
||||
no copy of one or more of the Font Software typefaces may be sold by
|
||||
itself.
|
||||
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of Tavmjong Bah shall not
|
||||
be used in advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Font Software without prior written authorization
|
||||
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||
. fr.
|
||||
|
||||
$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
|
||||
1373
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/NEWS
vendored
Normal file
1373
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/NEWS
vendored
Normal file
File diff suppressed because it is too large
Load Diff
59
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/README
vendored
Normal file
59
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/README
vendored
Normal file
@ -0,0 +1,59 @@
|
||||
DejaVu fonts 2.34 (c)2004-2013 DejaVu fonts team
|
||||
------------------------------------------------
|
||||
|
||||
The DejaVu fonts are a font family based on the Bitstream Vera Fonts
|
||||
(http://gnome.org/fonts/). Its purpose is to provide a wider range of
|
||||
characters (see status.txt for more information) while maintaining the
|
||||
original look and feel.
|
||||
|
||||
DejaVu fonts are based on Bitstream Vera fonts version 1.10.
|
||||
|
||||
Available fonts (Sans = sans serif, Mono = monospaced):
|
||||
|
||||
DejaVu Sans Mono
|
||||
DejaVu Sans Mono Bold
|
||||
DejaVu Sans Mono Bold Oblique
|
||||
DejaVu Sans Mono Oblique
|
||||
DejaVu Sans
|
||||
DejaVu Sans Bold
|
||||
DejaVu Sans Bold Oblique
|
||||
DejaVu Sans Oblique
|
||||
DejaVu Sans ExtraLight (experimental)
|
||||
DejaVu Serif
|
||||
DejaVu Serif Bold
|
||||
DejaVu Serif Bold Italic (experimental)
|
||||
DejaVu Serif Italic (experimental)
|
||||
DejaVu Sans Condensed (experimental)
|
||||
DejaVu Sans Condensed Bold (experimental)
|
||||
DejaVu Sans Condensed Bold Oblique (experimental)
|
||||
DejaVu Sans Condensed Oblique (experimental)
|
||||
DejaVu Serif Condensed (experimental)
|
||||
DejaVu Serif Condensed Bold (experimental)
|
||||
DejaVu Serif Condensed Bold Italic (experimental)
|
||||
DejaVu Serif Condensed Italic (experimental)
|
||||
|
||||
All fonts are also available as derivative called DejaVu LGC with support
|
||||
only for Latin, Greek and Cyrillic scripts.
|
||||
|
||||
For license information see LICENSE. What's new is described in NEWS. Known
|
||||
bugs are in BUGS. All authors are mentioned in AUTHORS.
|
||||
|
||||
Fonts are published in source form as SFD files (Spline Font Database from
|
||||
FontForge - http://fontforge.sf.net/) and in compiled form as TTF files
|
||||
(TrueType fonts).
|
||||
|
||||
For more information go to http://dejavu.sourceforge.net/.
|
||||
|
||||
Characters from Arev fonts, Copyright (c) 2006 by Tavmjong Bah:
|
||||
---------------------------
|
||||
U+01BA, U+01BF, U+01F7, U+021C-U+021D, U+0220, U+0222-U+0223,
|
||||
U+02B9, U+02BA, U+02BD, U+02C2-U+02C5, U+02d4-U+02D5,
|
||||
U+02D7, U+02EC-U+02EE, U+0346-U+034E, U+0360, U+0362,
|
||||
U+03E2-03EF, U+0460-0463, U+0466-U+0486, U+0488-U+0489, U+04A8-U+04A9,
|
||||
U+0500-U+050F, U+2055-205E, U+20B0, U+20B2-U+20B3, U+2102, U+210D, U+210F,
|
||||
U+2111, U+2113, U+2115, U+2118-U+211A, U+211C-U+211D, U+2124, U+2135,
|
||||
U+213C-U+2140, U+2295-U+2298, U+2308-U+230B, U+26A2-U+26B1, U+2701-U+2704,
|
||||
U+2706-U+2709, U+270C-U+274B, U+2758-U+275A, U+2761-U+2775, U+2780-U+2794,
|
||||
U+2798-U+27AF, U+27B1-U+27BE, U+FB05-U+FB06
|
||||
|
||||
$Id: README 2535 2013-08-25 15:21:17Z moyogo $
|
||||
249
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/langcover.txt
vendored
Normal file
249
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/langcover.txt
vendored
Normal file
@ -0,0 +1,249 @@
|
||||
This is the language coverage file for DejaVu fonts
|
||||
($Id: langcover.txt 2538 2013-08-25 16:02:56Z moyogo $)
|
||||
|
||||
Sans Serif Sans Mono
|
||||
aa Afar 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ab Abkhazia 100% (90/90) 93% (84/90) 84% (76/90)
|
||||
af Afrikaans 100% (69/69) 100% (69/69) 100% (69/69)
|
||||
ak Akan 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
am Amharic (0/264) (0/264) (0/264)
|
||||
an Aragonese 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
ar Arabic 100% (36/36) (0/36) 100% (36/36)
|
||||
as Assamese (0/64) (0/64) (0/64)
|
||||
ast Asturian/Bable/Leonese/Asturleonese 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
av Avaric 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
ay Aymara 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
az-az Azerbaijani in Azerbaijan 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
az-ir Azerbaijani in Iran 100% (40/40) (0/40) 100% (40/40)
|
||||
ba Bashkir 100% (82/82) 100% (82/82) 97% (80/82)
|
||||
be Byelorussian 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
ber-dz Berber in Algeria 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ber-ma Berber in Morocco 100% (32/32) (0/32) (0/32)
|
||||
bg Bulgarian 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
bh Bihari (Devanagari script) (0/68) (0/68) (0/68)
|
||||
bho Bhojpuri (Devanagari script) (0/68) (0/68) (0/68)
|
||||
bi Bislama 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
bin Edo or Bini 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
bm Bambara 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
bn Bengali (0/63) (0/63) (0/63)
|
||||
bo Tibetan (0/95) (0/95) (0/95)
|
||||
br Breton 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
brx Bodo (Devanagari script) (0/82) (0/82) (0/82)
|
||||
bs Bosnian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
bua Buriat (Buryat) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
byn Blin/Bilin (0/255) (0/255) (0/255)
|
||||
ca Catalan 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
ce Chechen 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
ch Chamorro 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
chm Mari (Lower Cheremis / Upper Cheremis) 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
chr Cherokee (0/85) (0/85) (0/85)
|
||||
co Corsican 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
crh Crimean Tatar/Crimean Turkish 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
cs Czech 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
csb Kashubian 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
cu Old Church Slavonic 100% (103/103) 90% (93/103) 78% (81/103)
|
||||
cv Chuvash 100% (74/74) 100% (74/74) 100% (74/74)
|
||||
cy Welsh 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
da Danish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
de German 100% (59/59) 100% (59/59) 100% (59/59)
|
||||
doi Dogri (0/85) (0/85) (0/85)
|
||||
dv Divehi/Dhivehi/Maldivian (0/49) (0/49) (0/49)
|
||||
dz Dzongkha (0/95) (0/95) (0/95)
|
||||
ee Ewe 100% (99/99) 100% (99/99) 100% (99/99)
|
||||
el Greek 100% (69/69) 100% (69/69) 100% (69/69)
|
||||
en English 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
eo Esperanto 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
es Spanish 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
et Estonian 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
eu Basque 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
fa Persian 100% (40/40) (0/40) 100% (40/40)
|
||||
fat Fanti 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
ff Fulah (Fula) 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
fi Finnish 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
fil Filipino 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
fj Fijian 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
fo Faroese 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
fr French 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
fur Friulian 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
fy Frisian 100% (75/75) 100% (75/75) 100% (75/75)
|
||||
ga Irish 100% (80/80) 100% (80/80) 100% (80/80)
|
||||
gd Scots Gaelic 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
gez Ethiopic (Geez) (0/218) (0/218) (0/218)
|
||||
gl Galician 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
gn Guarani 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
gu Gujarati (0/68) (0/68) (0/68)
|
||||
gv Manx Gaelic 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
ha Hausa 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
haw Hawaiian 100% (63/63) 100% (63/63) 100% (63/63)
|
||||
he Hebrew 100% (27/27) (0/27) (0/27)
|
||||
hi Hindi (Devanagari script) (0/68) (0/68) (0/68)
|
||||
hne Chhattisgarhi (0/68) (0/68) (0/68)
|
||||
ho Hiri Motu 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
hr Croatian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
hsb Upper Sorbian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ht Haitian/Haitian Creole 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
hu Hungarian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
hy Armenian 100% (77/77) 100% (77/77) 100% (77/77)
|
||||
hz Herero 100% (57/57) 100% (57/57) 100% (57/57)
|
||||
ia Interlingua 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
id Indonesian 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
ie Interlingue 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ig Igbo 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
ii Sichuan Yi/Nuosu (0/1165) (0/1165) (0/1165)
|
||||
ik Inupiaq (Inupiak, Eskimo) 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
io Ido 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
is Icelandic 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
it Italian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
iu Inuktitut 100% (161/161) (0/161) (0/161)
|
||||
ja Japanese (0/6537) (0/6537) (0/6537)
|
||||
jv Javanese 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
ka Georgian 100% (33/33) 100% (33/33) 100% (33/33)
|
||||
kaa Kara-Kalpak (Karakalpak) 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
kab Kabyle 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ki Kikuyu 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
kj Kuanyama/Kwanyama 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
kk Kazakh 100% (77/77) 100% (77/77) 100% (77/77)
|
||||
kl Greenlandic 100% (81/81) 100% (81/81) 100% (81/81)
|
||||
km Central Khmer (0/63) (0/63) (0/63)
|
||||
kn Kannada (0/70) (0/70) (0/70)
|
||||
ko Korean (0/2443) (0/2443) (0/2443)
|
||||
kok Kokani (Devanagari script) (0/68) (0/68) (0/68)
|
||||
kr Kanuri 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
ks Kashmiri 78% (26/33) (0/33) 69% (23/33)
|
||||
ku-am Kurdish in Armenia 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
ku-iq Kurdish in Iraq 100% (32/32) (0/32) 87% (28/32)
|
||||
ku-ir Kurdish in Iran 100% (32/32) (0/32) 87% (28/32)
|
||||
ku-tr Kurdish in Turkey 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
kum Kumyk 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
kv Komi (Komi-Permyak/Komi-Siryan) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
kw Cornish 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
kwm Kwambi 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ky Kirgiz 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
la Latin 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
lah Lahnda 92% (25/27) (0/27) 85% (23/27)
|
||||
lb Luxembourgish (Letzeburgesch) 100% (75/75) 100% (75/75) 100% (75/75)
|
||||
lez Lezghian (Lezgian) 100% (67/67) 100% (67/67) 100% (67/67)
|
||||
lg Ganda 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
li Limburgan/Limburger/Limburgish 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ln Lingala 100% (81/81) 100% (81/81) 100% (81/81)
|
||||
lo Lao 100% (55/55) (0/55) 83% (46/55)
|
||||
lt Lithuanian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
lv Latvian 100% (78/78) 100% (78/78) 100% (78/78)
|
||||
mai Maithili (Devanagari script) (0/68) (0/68) (0/68)
|
||||
mg Malagasy 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
mh Marshallese 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
mi Maori 100% (64/64) 100% (64/64) 100% (64/64)
|
||||
mk Macedonian 100% (42/42) 100% (42/42) 100% (42/42)
|
||||
ml Malayalam (0/68) (0/68) (0/68)
|
||||
mn-cn Mongolian in China (0/130) (0/130) (0/130)
|
||||
mn-mn Mongolian in Mongolia 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
mni Maniputi (0/78) (0/78) (0/78)
|
||||
mo Moldavian 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
mr Marathi (Devanagari script) (0/68) (0/68) (0/68)
|
||||
ms Malay 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
mt Maltese 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
my Burmese (Myanmar) (0/48) (0/48) (0/48)
|
||||
na Nauru 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
nb Norwegian Bokmal 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
nds Low Saxon 100% (59/59) 100% (59/59) 100% (59/59)
|
||||
ne Nepali (0/72) (0/72) (0/72)
|
||||
ng Ndonga 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
nl Dutch 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
nn Norwegian Nynorsk 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
no Norwegian (Bokmal) 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
nqo N'Ko 91% (54/59) (0/59) (0/59)
|
||||
nr Ndebele, South 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
nso Northern Sotho 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
nv Navajo/Navaho 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ny Chichewa 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
oc Occitan 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
om Oromo or Galla 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
or Oriya (0/68) (0/68) (0/68)
|
||||
os Ossetic 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
ota Ottoman Turkish 100% (37/37) (0/37) 97% (36/37)
|
||||
pa Panjabi/Punjabi (0/63) (0/63) (0/63)
|
||||
pa-pk Panjabi/Punjabi in Pakistan 92% (25/27) (0/27) 85% (23/27)
|
||||
pap-an Papiamento in Netherlands Antilles 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
pap-aw Papiamento in Aruba 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
pes Western Farsi 100% (40/40) (0/40) 100% (40/40)
|
||||
pl Polish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
prs Dari/Eastern Farsi 100% (40/40) (0/40) 100% (40/40)
|
||||
ps-af Pashto in Afghanistan 95% (47/49) (0/49) 77% (38/49)
|
||||
ps-pk Pashto in Pakistan 93% (46/49) (0/49) 75% (37/49)
|
||||
pt Portuguese 100% (82/82) 100% (82/82) 100% (82/82)
|
||||
qu Quechua 100% (55/55) 100% (55/55) 100% (55/55)
|
||||
rm Rhaeto-Romance (Romansch) 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
rn Rundi 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ro Romanian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
ru Russian 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
rw Kinyarwanda 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
sa Sanskrit (Devanagari script) (0/68) (0/68) (0/68)
|
||||
sah Yakut 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
sat Santali (Devanagari script) (0/70) (0/70) (0/70)
|
||||
sc Sardinian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
sco Scots 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
sd Sindhi 100% (54/54) (0/54) 79% (43/54)
|
||||
se North Sami 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
sel Selkup (Ostyak-Samoyed) 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
sg Sango 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
sh Serbo-Croatian 100% (156/156) 100% (156/156) 98% (154/156)
|
||||
shs Secwepemctsin 100% (48/48) 100% (48/48) 100% (48/48)
|
||||
si Sinhala/Sinhalese (0/73) (0/73) (0/73)
|
||||
sid Sidamo (0/281) (0/281) (0/281)
|
||||
sk Slovak 100% (86/86) 100% (86/86) 100% (86/86)
|
||||
sl Slovenian 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
sm Samoan 100% (53/53) 100% (53/53) 100% (53/53)
|
||||
sma South Sami 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
smj Lule Sami 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
smn Inari Sami 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
sms Skolt Sami 100% (80/80) 100% (80/80) 97% (78/80)
|
||||
sn Shona 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
so Somali 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
sq Albanian 100% (56/56) 100% (56/56) 100% (56/56)
|
||||
sr Serbian 100% (60/60) 100% (60/60) 100% (60/60)
|
||||
ss Swati 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
st Sotho, Southern 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
su Sundanese 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
sv Swedish 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
sw Swahili 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
syr Syriac (0/45) (0/45) (0/45)
|
||||
ta Tamil (0/48) (0/48) (0/48)
|
||||
te Telugu (0/70) (0/70) (0/70)
|
||||
tg Tajik 100% (78/78) 100% (78/78) 97% (76/78)
|
||||
th Thai 1% (1/74) (0/74) (0/74)
|
||||
ti-er Eritrean Tigrinya (0/255) (0/255) (0/255)
|
||||
ti-et Ethiopian Tigrinya (0/281) (0/281) (0/281)
|
||||
tig Tigre (0/221) (0/221) (0/221)
|
||||
tk Turkmen 100% (68/68) 100% (68/68) 100% (68/68)
|
||||
tl Tagalog 100% (84/84) 100% (84/84) 100% (84/84)
|
||||
tn Tswana 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
to Tonga 100% (53/53) 100% (53/53) 100% (53/53)
|
||||
tr Turkish 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ts Tsonga 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
tt Tatar 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
tw Twi 100% (73/73) 100% (73/73) 100% (73/73)
|
||||
ty Tahitian 100% (65/65) 100% (65/65) 100% (65/65)
|
||||
tyv Tuvinian 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
ug Uyghur 87% (29/33) (0/33) 78% (26/33)
|
||||
uk Ukrainian 100% (72/72) 100% (72/72) 100% (72/72)
|
||||
ur Urdu 92% (25/27) (0/27) 85% (23/27)
|
||||
uz Uzbek 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
ve Venda 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
vi Vietnamese 100% (194/194) 100% (194/194) 76% (148/194)
|
||||
vo Volapuk 100% (54/54) 100% (54/54) 100% (54/54)
|
||||
vot Votic 100% (62/62) 100% (62/62) 100% (62/62)
|
||||
wa Walloon 100% (70/70) 100% (70/70) 100% (70/70)
|
||||
wal Wolaitta/Wolaytta (0/281) (0/281) (0/281)
|
||||
wen Sorbian languages (lower and upper) 100% (76/76) 100% (76/76) 100% (76/76)
|
||||
wo Wolof 100% (66/66) 100% (66/66) 100% (66/66)
|
||||
xh Xhosa 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
yap Yapese 100% (58/58) 100% (58/58) 100% (58/58)
|
||||
yi Yiddish 100% (27/27) (0/27) (0/27)
|
||||
yo Yoruba 100% (119/119) 100% (119/119) 100% (119/119)
|
||||
za Zhuang/Chuang 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
zh-cn Chinese (simplified) 0% (2/6765) 0% (2/6765) 0% (2/6765)
|
||||
zh-hk Chinese Hong Kong Supplementary Character Set (0/2213) (0/2213) (0/2213)
|
||||
zh-mo Chinese in Macau (0/2213) (0/2213) (0/2213)
|
||||
zh-sg Chinese in Singapore 0% (2/6765) 0% (2/6765) 0% (2/6765)
|
||||
zh-tw Chinese (traditional) (0/13063) (0/13063) (0/13063)
|
||||
zu Zulu 100% (52/52) 100% (52/52) 100% (52/52)
|
||||
226
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/unicover.txt
vendored
Normal file
226
vendor/tecnickcom/tcpdf/fonts/dejavu-fonts-ttf-2.34/unicover.txt
vendored
Normal file
@ -0,0 +1,226 @@
|
||||
This is the Unicode coverage file for DejaVu fonts
|
||||
($Id: unicover.txt 2538 2013-08-25 16:02:56Z moyogo $)
|
||||
|
||||
Control and similar characters are discounted from totals.
|
||||
|
||||
Sans Serif Sans Mono
|
||||
U+0000 Basic Latin 100% (95/95) 100% (95/95) 100% (95/95)
|
||||
U+0080 Latin-1 Supplement 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+0100 Latin Extended-A 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
U+0180 Latin Extended-B 100% (208/208) 100% (208/208) 86% (180/208)
|
||||
U+0250 IPA Extensions 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+02b0 Spacing Modifier Letters 78% (63/80) 73% (59/80) 62% (50/80)
|
||||
U+0300 Combining Diacritical Marks 83% (93/112) 61% (69/112) 59% (67/112)
|
||||
U+0370 Greek and Coptic 100% (134/134) 89% (120/134) 82% (110/134)
|
||||
U+0400 Cyrillic 100% (256/256) 79% (204/256) 70% (180/256)
|
||||
U+0500 Cyrillic Supplement 95% (38/40) 25% (10/40) 15% (6/40)
|
||||
U+0530 Armenian 98% (86/87) 98% (86/87) 98% (86/87)
|
||||
U+0590 Hebrew 62% (54/87) (0/87) (0/87)
|
||||
U+0600 Arabic 63% (161/253) (0/253) 39% (99/253)
|
||||
U+0700 Syriac (0/77) (0/77) (0/77)
|
||||
U+0750 Arabic Supplement (0/48) (0/48) (0/48)
|
||||
U+0780 Thaana (0/50) (0/50) (0/50)
|
||||
U+07c0 NKo 91% (54/59) (0/59) (0/59)
|
||||
U+0800 Samaritan (0/61) (0/61) (0/61)
|
||||
U+0840 Mandaic (0/29) (0/29) (0/29)
|
||||
U+08a0 Arabic Extended-A (0/39) (0/39) (0/39)
|
||||
U+0900 Devanagari (0/127) (0/127) (0/127)
|
||||
U+0980 Bengali (0/92) (0/92) (0/92)
|
||||
U+0a00 Gurmukhi (0/79) (0/79) (0/79)
|
||||
U+0a80 Gujarati (0/84) (0/84) (0/84)
|
||||
U+0b00 Oriya (0/90) (0/90) (0/90)
|
||||
U+0b80 Tamil (0/72) (0/72) (0/72)
|
||||
U+0c00 Telugu (0/93) (0/93) (0/93)
|
||||
U+0c80 Kannada (0/86) (0/86) (0/86)
|
||||
U+0d00 Malayalam (0/98) (0/98) (0/98)
|
||||
U+0d80 Sinhala (0/80) (0/80) (0/80)
|
||||
U+0e00 Thai 1% (1/87) (0/87) (0/87)
|
||||
U+0e80 Lao 97% (65/67) (0/67) 68% (46/67)
|
||||
U+0f00 Tibetan (0/211) (0/211) (0/211)
|
||||
U+1000 Myanmar (0/160) (0/160) (0/160)
|
||||
U+10a0 Georgian 94% (83/88) 94% (83/88) 51% (45/88)
|
||||
U+1100 Hangul Jamo (0/256) (0/256) (0/256)
|
||||
U+1200 Ethiopic (0/358) (0/358) (0/358)
|
||||
U+1380 Ethiopic Supplement (0/26) (0/26) (0/26)
|
||||
U+13a0 Cherokee (0/85) (0/85) (0/85)
|
||||
U+1400 Unified Canadian Aboriginal Syllabics 63% (404/640) (0/640) (0/640)
|
||||
U+1680 Ogham 100% (29/29) (0/29) (0/29)
|
||||
U+16a0 Runic (0/81) (0/81) (0/81)
|
||||
U+1700 Tagalog (0/20) (0/20) (0/20)
|
||||
U+1720 Hanunoo (0/23) (0/23) (0/23)
|
||||
U+1740 Buhid (0/20) (0/20) (0/20)
|
||||
U+1760 Tagbanwa (0/18) (0/18) (0/18)
|
||||
U+1780 Khmer (0/114) (0/114) (0/114)
|
||||
U+1800 Mongolian (0/156) (0/156) (0/156)
|
||||
U+18b0 Unified Canadian Aboriginal Syllabics Extended (0/70) (0/70) (0/70)
|
||||
U+1900 Limbu (0/66) (0/66) (0/66)
|
||||
U+1950 Tai Le (0/35) (0/35) (0/35)
|
||||
U+1980 New Tai Lue (0/83) (0/83) (0/83)
|
||||
U+19e0 Khmer Symbols (0/32) (0/32) (0/32)
|
||||
U+1a00 Buginese (0/30) (0/30) (0/30)
|
||||
U+1a20 Tai Tham (0/127) (0/127) (0/127)
|
||||
U+1b00 Balinese (0/121) (0/121) (0/121)
|
||||
U+1b80 Sundanese (0/64) (0/64) (0/64)
|
||||
U+1bc0 Batak (0/56) (0/56) (0/56)
|
||||
U+1c00 Lepcha (0/74) (0/74) (0/74)
|
||||
U+1c50 Ol Chiki (0/48) (0/48) (0/48)
|
||||
U+1cc0 Sundanese Supplement (0/8) (0/8) (0/8)
|
||||
U+1cd0 Vedic Extensions (0/39) (0/39) (0/39)
|
||||
U+1d00 Phonetic Extensions 82% (106/128) 89% (115/128) 48% (62/128)
|
||||
U+1d80 Phonetic Extensions Supplement 59% (38/64) 59% (38/64) 57% (37/64)
|
||||
U+1dc0 Combining Diacritical Marks Supplement 13% (6/43) 13% (6/43) (0/43)
|
||||
U+1e00 Latin Extended Additional 98% (252/256) 98% (252/256) 71% (182/256)
|
||||
U+1f00 Greek Extended 100% (233/233) 100% (233/233) 100% (233/233)
|
||||
U+2000 General Punctuation 100% (107/107) 81% (87/107) 49% (53/107)
|
||||
U+2070 Superscripts and Subscripts 100% (42/42) 100% (42/42) 100% (42/42)
|
||||
U+20a0 Currency Symbols 92% (25/27) 29% (8/27) 88% (24/27)
|
||||
U+20d0 Combining Diacritical Marks for Symbols 21% (7/33) (0/33) (0/33)
|
||||
U+2100 Letterlike Symbols 93% (75/80) 42% (34/80) 22% (18/80)
|
||||
U+2150 Number Forms 94% (55/58) 94% (55/58) 22% (13/58)
|
||||
U+2190 Arrows 100% (112/112) 100% (112/112) 100% (112/112)
|
||||
U+2200 Mathematical Operators 100% (256/256) 39% (100/256) 62% (159/256)
|
||||
U+2300 Miscellaneous Technical 26% (65/244) 14% (35/244) 47% (117/244)
|
||||
U+2400 Control Pictures 5% (2/39) 2% (1/39) 2% (1/39)
|
||||
U+2440 Optical Character Recognition (0/11) (0/11) (0/11)
|
||||
U+2460 Enclosed Alphanumerics 6% (10/160) (0/160) (0/160)
|
||||
U+2500 Box Drawing 100% (128/128) 100% (128/128) 100% (128/128)
|
||||
U+2580 Block Elements 100% (32/32) 100% (32/32) 100% (32/32)
|
||||
U+25a0 Geometric Shapes 100% (96/96) 100% (96/96) 100% (96/96)
|
||||
U+2600 Miscellaneous Symbols 73% (187/256) 11% (30/256) 58% (149/256)
|
||||
U+2700 Dingbats 91% (174/191) 0% (1/191) 75% (144/191)
|
||||
U+27c0 Miscellaneous Mathematical Symbols-A 18% (9/48) 10% (5/48) 16% (8/48)
|
||||
U+27f0 Supplemental Arrows-A 100% (16/16) 100% (16/16) (0/16)
|
||||
U+2800 Braille Patterns 100% (256/256) 100% (256/256) (0/256)
|
||||
U+2900 Supplemental Arrows-B 4% (6/128) 100% (128/128) (0/128)
|
||||
U+2980 Miscellaneous Mathematical Symbols-B 10% (13/128) 0% (1/128) 2% (3/128)
|
||||
U+2a00 Supplemental Mathematical Operators 28% (74/256) 2% (6/256) 1% (3/256)
|
||||
U+2b00 Miscellaneous Symbols and Arrows 40% (35/87) 31% (27/87) 20% (18/87)
|
||||
U+2c00 Glagolitic (0/94) (0/94) (0/94)
|
||||
U+2c60 Latin Extended-C 96% (31/32) 84% (27/32) 43% (14/32)
|
||||
U+2c80 Coptic (0/123) (0/123) (0/123)
|
||||
U+2d00 Georgian Supplement 95% (38/40) 95% (38/40) (0/40)
|
||||
U+2d30 Tifinagh 93% (55/59) (0/59) (0/59)
|
||||
U+2d80 Ethiopic Extended (0/79) (0/79) (0/79)
|
||||
U+2de0 Cyrillic Extended-A (0/32) (0/32) (0/32)
|
||||
U+2e00 Supplemental Punctuation 11% (7/60) 11% (7/60) 11% (7/60)
|
||||
U+2e80 CJK Radicals Supplement (0/115) (0/115) (0/115)
|
||||
U+2f00 Kangxi Radicals (0/214) (0/214) (0/214)
|
||||
U+2ff0 Ideographic Description Characters (0/12) (0/12) (0/12)
|
||||
U+3000 CJK Symbols and Punctuation (0/64) (0/64) (0/64)
|
||||
U+3040 Hiragana (0/93) (0/93) (0/93)
|
||||
U+30a0 Katakana (0/96) (0/96) (0/96)
|
||||
U+3100 Bopomofo (0/41) (0/41) (0/41)
|
||||
U+3130 Hangul Compatibility Jamo (0/94) (0/94) (0/94)
|
||||
U+3190 Kanbun (0/16) (0/16) (0/16)
|
||||
U+31a0 Bopomofo Extended (0/27) (0/27) (0/27)
|
||||
U+31c0 CJK Strokes (0/36) (0/36) (0/36)
|
||||
U+31f0 Katakana Phonetic Extensions (0/16) (0/16) (0/16)
|
||||
U+3200 Enclosed CJK Letters and Months (0/254) (0/254) (0/254)
|
||||
U+3300 CJK Compatibility (0/256) (0/256) (0/256)
|
||||
U+3400 CJK Unified Ideographs Extension A (0/0) (0/0) (0/0)
|
||||
U+4dc0 Yijing Hexagram Symbols 100% (64/64) (0/64) (0/64)
|
||||
U+4e00 CJK Unified Ideographs (0/0) (0/0) (0/0)
|
||||
U+a000 Yi Syllables (0/1165) (0/1165) (0/1165)
|
||||
U+a490 Yi Radicals (0/55) (0/55) (0/55)
|
||||
U+a4d0 Lisu 100% (48/48) (0/48) (0/48)
|
||||
U+a500 Vai (0/300) (0/300) (0/300)
|
||||
U+a640 Cyrillic Extended-B 34% (31/89) 11% (10/89) (0/89)
|
||||
U+a6a0 Bamum (0/88) (0/88) (0/88)
|
||||
U+a700 Modifier Tone Letters 62% (20/32) 62% (20/32) 62% (20/32)
|
||||
U+a720 Latin Extended-D 55% (75/134) 43% (58/134) 11% (15/134)
|
||||
U+a800 Syloti Nagri (0/44) (0/44) (0/44)
|
||||
U+a830 Common Indic Number Forms (0/10) (0/10) (0/10)
|
||||
U+a840 Phags-pa (0/56) (0/56) (0/56)
|
||||
U+a880 Saurashtra (0/81) (0/81) (0/81)
|
||||
U+a8e0 Devanagari Extended (0/28) (0/28) (0/28)
|
||||
U+a900 Kayah Li (0/48) (0/48) (0/48)
|
||||
U+a930 Rejang (0/37) (0/37) (0/37)
|
||||
U+a960 Hangul Jamo Extended-A (0/29) (0/29) (0/29)
|
||||
U+a980 Javanese (0/91) (0/91) (0/91)
|
||||
U+aa00 Cham (0/83) (0/83) (0/83)
|
||||
U+aa60 Myanmar Extended-A (0/28) (0/28) (0/28)
|
||||
U+aa80 Tai Viet (0/72) (0/72) (0/72)
|
||||
U+aae0 Meetei Mayek Extensions (0/23) (0/23) (0/23)
|
||||
U+ab00 Ethiopic Extended-A (0/32) (0/32) (0/32)
|
||||
U+abc0 Meetei Mayek (0/56) (0/56) (0/56)
|
||||
U+ac00 Hangul Syllables (0/0) (0/0) (0/0)
|
||||
U+d7b0 Hangul Jamo Extended-B (0/72) (0/72) (0/72)
|
||||
U+d800 High Surrogates (0/0) (0/0) (0/0)
|
||||
U+db80 High Private Use Surrogates (0/0) (0/0) (0/0)
|
||||
U+dc00 Low Surrogates (0/0) (0/0) (0/0)
|
||||
U+e000 Private Use Area (0/0) (0/0) (0/0)
|
||||
U+f900 CJK Compatibility Ideographs (0/472) (0/472) (0/472)
|
||||
U+fb00 Alphabetic Presentation Forms 100% (58/58) 12% (7/58) 3% (2/58)
|
||||
U+fb50 Arabic Presentation Forms-A 16% (98/611) (0/611) 11% (72/611)
|
||||
U+fe00 Variation Selectors 100% (16/16) 100% (16/16) (0/16)
|
||||
U+fe10 Vertical Forms (0/10) (0/10) (0/10)
|
||||
U+fe20 Combining Half Marks 57% (4/7) (0/7) (0/7)
|
||||
U+fe30 CJK Compatibility Forms (0/32) (0/32) (0/32)
|
||||
U+fe50 Small Form Variants (0/26) (0/26) (0/26)
|
||||
U+fe70 Arabic Presentation Forms-B 100% (141/141) (0/141) 100% (141/141)
|
||||
U+ff00 Halfwidth and Fullwidth Forms (0/225) (0/225) (0/225)
|
||||
U+fff0 Specials 100% (5/5) 100% (5/5) 100% (5/5)
|
||||
U+10000 Linear B Syllabary (0/88) (0/88) (0/88)
|
||||
U+10080 Linear B Ideograms (0/123) (0/123) (0/123)
|
||||
U+10100 Aegean Numbers (0/57) (0/57) (0/57)
|
||||
U+10140 Ancient Greek Numbers (0/75) (0/75) (0/75)
|
||||
U+10190 Ancient Symbols (0/12) (0/12) (0/12)
|
||||
U+101d0 Phaistos Disc (0/46) (0/46) (0/46)
|
||||
U+10280 Lycian (0/29) (0/29) (0/29)
|
||||
U+102a0 Carian (0/49) (0/49) (0/49)
|
||||
U+10300 Old Italic 100% (35/35) (0/35) (0/35)
|
||||
U+10330 Gothic (0/27) (0/27) (0/27)
|
||||
U+10380 Ugaritic (0/31) (0/31) (0/31)
|
||||
U+103a0 Old Persian (0/50) (0/50) (0/50)
|
||||
U+10400 Deseret (0/80) (0/80) (0/80)
|
||||
U+10450 Shavian (0/48) (0/48) (0/48)
|
||||
U+10480 Osmanya (0/40) (0/40) (0/40)
|
||||
U+10800 Cypriot Syllabary (0/55) (0/55) (0/55)
|
||||
U+10840 Imperial Aramaic (0/31) (0/31) (0/31)
|
||||
U+10900 Phoenician (0/29) (0/29) (0/29)
|
||||
U+10920 Lydian (0/27) (0/27) (0/27)
|
||||
U+10980 Meroitic Hieroglyphs (0/32) (0/32) (0/32)
|
||||
U+109a0 Meroitic Cursive (0/26) (0/26) (0/26)
|
||||
U+10a00 Kharoshthi (0/65) (0/65) (0/65)
|
||||
U+10a60 Old South Arabian (0/32) (0/32) (0/32)
|
||||
U+10b00 Avestan (0/61) (0/61) (0/61)
|
||||
U+10b40 Inscriptional Parthian (0/30) (0/30) (0/30)
|
||||
U+10b60 Inscriptional Pahlavi (0/27) (0/27) (0/27)
|
||||
U+10c00 Old Turkic (0/73) (0/73) (0/73)
|
||||
U+10e60 Rumi Numeral Symbols (0/31) (0/31) (0/31)
|
||||
U+11000 Brahmi (0/108) (0/108) (0/108)
|
||||
U+11080 Kaithi (0/66) (0/66) (0/66)
|
||||
U+110d0 Sora Sompeng (0/35) (0/35) (0/35)
|
||||
U+11100 Chakma (0/67) (0/67) (0/67)
|
||||
U+11180 Sharada (0/83) (0/83) (0/83)
|
||||
U+11680 Takri (0/66) (0/66) (0/66)
|
||||
U+12000 Cuneiform (0/879) (0/879) (0/879)
|
||||
U+12400 Cuneiform Numbers and Punctuation (0/103) (0/103) (0/103)
|
||||
U+13000 Egyptian Hieroglyphs (0/1071) (0/1071) (0/1071)
|
||||
U+16800 Bamum Supplement (0/569) (0/569) (0/569)
|
||||
U+16f00 Miao (0/133) (0/133) (0/133)
|
||||
U+1b000 Kana Supplement (0/2) (0/2) (0/2)
|
||||
U+1d000 Byzantine Musical Symbols (0/246) (0/246) (0/246)
|
||||
U+1d100 Musical Symbols (0/220) (0/220) (0/220)
|
||||
U+1d200 Ancient Greek Musical Notation (0/70) (0/70) (0/70)
|
||||
U+1d300 Tai Xuan Jing Symbols 100% (87/87) (0/87) (0/87)
|
||||
U+1d360 Counting Rod Numerals (0/18) (0/18) (0/18)
|
||||
U+1d400 Mathematical Alphanumeric Symbols 11% (117/996) 5% (55/996) 6% (63/996)
|
||||
U+1ee00 Arabic Mathematical Alphabetic Symbols (0/143) (0/143) (0/143)
|
||||
U+1f000 Mahjong Tiles (0/44) (0/44) (0/44)
|
||||
U+1f030 Domino Tiles 100% (100/100) (0/100) (0/100)
|
||||
U+1f0a0 Playing Cards 100% (59/59) (0/59) (0/59)
|
||||
U+1f100 Enclosed Alphanumeric Supplement (0/171) (0/171) (0/171)
|
||||
U+1f200 Enclosed Ideographic Supplement (0/57) (0/57) (0/57)
|
||||
U+1f300 Miscellaneous Symbols And Pictographs 0% (4/533) (0/533) (0/533)
|
||||
U+1f600 Emoticons 82% (63/76) (0/76) (0/76)
|
||||
U+1f680 Transport And Map Symbols (0/70) (0/70) (0/70)
|
||||
U+1f700 Alchemical Symbols (0/116) (0/116) (0/116)
|
||||
U+20000 CJK Unified Ideographs Extension B (0/0) (0/0) (0/0)
|
||||
U+2a700 CJK Unified Ideographs Extension C (0/0) (0/0) (0/0)
|
||||
U+2b740 CJK Unified Ideographs Extension D (0/0) (0/0) (0/0)
|
||||
U+2f800 CJK Compatibility Ideographs Supplement (0/542) (0/542) (0/542)
|
||||
U+e0000 Tags (0/98) (0/98) (0/98)
|
||||
U+e0100 Variation Selectors Supplement (0/240) (0/240) (0/240)
|
||||
U+f0000 Supplementary Private Use Area-A (0/0) (0/0) (0/0)
|
||||
U+100000 Supplementary Private Use Area-B (0/0) (0/0) (0/0)
|
||||
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusans.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusans.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusans.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusans.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusans.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusans.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansb.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansb.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusansb.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusansb.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansb.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansb.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansbi.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensed.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedb.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedbi.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusanscondensedi.z
vendored
Normal file
Binary file not shown.
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.ctg.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.ctg.z
vendored
Normal file
Binary file not shown.
16
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.php
vendored
Normal file
16
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.php
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.z
vendored
Normal file
BIN
vendor/tecnickcom/tcpdf/fonts/dejavusansextralight.z
vendored
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user