[AUTOMATED] Updating ES-DE after build [skip ci]

This commit is contained in:
github-actions[bot] 2024-07-19 12:59:44 +00:00
parent ca629ec65b
commit 4219938278
12272 changed files with 1495997 additions and 22 deletions

0
.flatpak-builder/cache/.lock vendored Normal file
View file

4
.flatpak-builder/cache/config vendored Normal file
View file

@ -0,0 +1,4 @@
[core]
repo_version=1
mode=bare-user-only
min-free-space-percent=0

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 339.6 67.1" version="1.1" id="svg30602" xmlns="http://www.w3.org/2000/svg">
<path d="M 71.048 11.008 L 33.046 65.531 L 0 11.008 L 19.337 0 L 35.525 30.836 L 50.394 0 L 71.048 11.008 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14927"/>
<path d="M 209.84 62.227 L 198.444 67.018 L 191.977 42.4 L 179.893 62.371 L 162.777 41.574 L 156.233 67.018 L 142.097 62.227 L 156.659 7.537 L 177.609 34.965 L 198.753 7.537 L 209.84 62.227 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14929"/>
<path d="M 220.476 7.537 L 238.755 7.537 L 238.755 67.018 L 220.476 67.018 L 220.476 7.537 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14931"/>
<path d="M 289.546 67.018 L 253.105 67.018 L 253.105 7.537 L 270.149 7.537 L 270.149 56.833 L 289.546 56.833 L 289.546 67.018 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14933"/>
<path d="M 339.602 67.018 L 299.063 67.018 L 299.063 7.537 L 338.286 7.537 L 338.286 17.8 L 317.219 17.8 L 317.219 33.677 L 339.137 33.677 L 339.137 40.259 L 317.219 40.259 L 317.219 56.833 L 339.602 56.833 L 339.602 67.018 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14935"/>
<path d="M 127.795 11.077 C 122.56 8.902 115.552 7.983 109.999 8.664 C 98.968 10.019 91.904 18.301 93.277 29.477 C 94.585 40.142 100.789 41.753 110.089 43.207 C 113.264 43.707 119.06 44.404 119.553 48.421 C 120.028 52.293 116.655 54.412 113.295 54.825 C 108.4 55.426 103.849 53.389 99.884 50.687 L 95.165 62.982 C 101.275 66.236 108.355 67.74 115.295 66.887 C 120.847 66.206 126.43 63.963 130.291 59.782 C 134.216 55.519 134.841 49.732 134.168 44.254 C 133.074 35.341 126.681 32.197 118.733 30.875 L 114.946 30.227 C 112.364 29.728 108.34 28.963 107.945 25.748 C 107.569 22.681 110.886 20.715 113.516 20.393 C 117.023 19.962 120.562 21.01 123.461 22.879 L 127.795 11.077 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14937"/>
<path d="M 58.384 49.885 C 54.561 49.885 51.502 52.944 51.502 56.767 C 51.502 60.531 54.561 63.647 58.384 63.647 C 62.207 63.647 65.265 60.531 65.265 56.767 C 65.265 52.944 62.207 49.885 58.384 49.885 Z" style="fill-opacity: 1; fill-rule: nonzero; stroke-width: 1.54833; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 3.864; stroke-dasharray: none; stroke-opacity: 1; fill: rgb(255, 255, 255);" id="path14939"/>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View file

@ -0,0 +1,216 @@
/*
* Copyright (c) 2001 Fabrice Bellard
*
* 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.
*/
/**
* @file
* video encoding with libavcodec API example
*
* @example encode_video.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <libavcodec/avcodec.h>
#include <libavutil/opt.h>
#include <libavutil/imgutils.h>
static void encode(AVCodecContext *enc_ctx, AVFrame *frame, AVPacket *pkt,
FILE *outfile)
{
int ret;
/* send the frame to the encoder */
if (frame)
printf("Send frame %3"PRId64"\n", frame->pts);
ret = avcodec_send_frame(enc_ctx, frame);
if (ret < 0) {
fprintf(stderr, "Error sending a frame for encoding\n");
exit(1);
}
while (ret >= 0) {
ret = avcodec_receive_packet(enc_ctx, pkt);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
return;
else if (ret < 0) {
fprintf(stderr, "Error during encoding\n");
exit(1);
}
printf("Write packet %3"PRId64" (size=%5d)\n", pkt->pts, pkt->size);
fwrite(pkt->data, 1, pkt->size, outfile);
av_packet_unref(pkt);
}
}
int main(int argc, char **argv)
{
const char *filename, *codec_name;
const AVCodec *codec;
AVCodecContext *c= NULL;
int i, ret, x, y;
FILE *f;
AVFrame *frame;
AVPacket *pkt;
uint8_t endcode[] = { 0, 0, 1, 0xb7 };
if (argc <= 2) {
fprintf(stderr, "Usage: %s <output file> <codec name>\n", argv[0]);
exit(0);
}
filename = argv[1];
codec_name = argv[2];
/* find the mpeg1video encoder */
codec = avcodec_find_encoder_by_name(codec_name);
if (!codec) {
fprintf(stderr, "Codec '%s' not found\n", codec_name);
exit(1);
}
c = avcodec_alloc_context3(codec);
if (!c) {
fprintf(stderr, "Could not allocate video codec context\n");
exit(1);
}
pkt = av_packet_alloc();
if (!pkt)
exit(1);
/* put sample parameters */
c->bit_rate = 400000;
/* resolution must be a multiple of two */
c->width = 352;
c->height = 288;
/* frames per second */
c->time_base = (AVRational){1, 25};
c->framerate = (AVRational){25, 1};
/* emit one intra frame every ten frames
* check frame pict_type before passing frame
* to encoder, if frame->pict_type is AV_PICTURE_TYPE_I
* then gop_size is ignored and the output of encoder
* will always be I frame irrespective to gop_size
*/
c->gop_size = 10;
c->max_b_frames = 1;
c->pix_fmt = AV_PIX_FMT_YUV420P;
if (codec->id == AV_CODEC_ID_H264)
av_opt_set(c->priv_data, "preset", "slow", 0);
/* open it */
ret = avcodec_open2(c, codec, NULL);
if (ret < 0) {
fprintf(stderr, "Could not open codec: %s\n", av_err2str(ret));
exit(1);
}
f = fopen(filename, "wb");
if (!f) {
fprintf(stderr, "Could not open %s\n", filename);
exit(1);
}
frame = av_frame_alloc();
if (!frame) {
fprintf(stderr, "Could not allocate video frame\n");
exit(1);
}
frame->format = c->pix_fmt;
frame->width = c->width;
frame->height = c->height;
ret = av_frame_get_buffer(frame, 0);
if (ret < 0) {
fprintf(stderr, "Could not allocate the video frame data\n");
exit(1);
}
/* encode 1 second of video */
for (i = 0; i < 25; i++) {
fflush(stdout);
/* Make sure the frame data is writable.
On the first round, the frame is fresh from av_frame_get_buffer()
and therefore we know it is writable.
But on the next rounds, encode() will have called
avcodec_send_frame(), and the codec may have kept a reference to
the frame in its internal structures, that makes the frame
unwritable.
av_frame_make_writable() checks that and allocates a new buffer
for the frame only if necessary.
*/
ret = av_frame_make_writable(frame);
if (ret < 0)
exit(1);
/* Prepare a dummy image.
In real code, this is where you would have your own logic for
filling the frame. FFmpeg does not care what you put in the
frame.
*/
/* Y */
for (y = 0; y < c->height; y++) {
for (x = 0; x < c->width; x++) {
frame->data[0][y * frame->linesize[0] + x] = x + y + i * 3;
}
}
/* Cb and Cr */
for (y = 0; y < c->height/2; y++) {
for (x = 0; x < c->width/2; x++) {
frame->data[1][y * frame->linesize[1] + x] = 128 + y + i * 2;
frame->data[2][y * frame->linesize[2] + x] = 64 + x + i * 5;
}
}
frame->pts = i;
/* encode the image */
encode(c, frame, pkt, f);
}
/* flush the encoder */
encode(c, NULL, pkt, f);
/* Add sequence end code to have a real MPEG file.
It makes only sense because this tiny examples writes packets
directly. This is called "elementary stream" and only works for some
codecs. To create a valid file, you usually need to write packets
into a proper file format or protocol; see muxing.c.
*/
if (codec->id == AV_CODEC_ID_MPEG1VIDEO || codec->id == AV_CODEC_ID_MPEG2VIDEO)
fwrite(endcode, 1, sizeof(endcode), f);
fclose(f);
avcodec_free_context(&c);
av_frame_free(&frame);
av_packet_free(&pkt);
return 0;
}

View file

@ -0,0 +1,667 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
viewBox="0 0 653.57422 443.94815"
height="443.94815"
width="653.57422"
xml:space="preserve"
version="1.1"
id="svg2"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="consolegame.svg"><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="3840"
inkscape:window-height="2065"
id="namedview80"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.3384589"
inkscape:cx="331.31377"
inkscape:cy="150.25613"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" /><metadata
id="metadata8"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs6"><clipPath
id="clipPath16"
clipPathUnits="userSpaceOnUse"><path
id="path18"
d="m 0,355.159 288.939,0 L 288.939,0 0,0 0,355.159 Z"
inkscape:connector-curvature="0" /></clipPath><linearGradient
id="linearGradient48"
spreadMethod="pad"
gradientTransform="matrix(0,6.2488999,6.2488999,0,220.7242,22.255291)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop50"
offset="0"
style="stop-opacity:1;stop-color:#d1d3d4" /><stop
id="stop52"
offset="1"
style="stop-opacity:1;stop-color:#808080" /></linearGradient><linearGradient
id="linearGradient68"
spreadMethod="pad"
gradientTransform="matrix(0,4.5653,4.5653,0,220.72404,23.09749)"
gradientUnits="userSpaceOnUse"
y2="0"
x2="1"
y1="0"
x1="0"><stop
id="stop70"
offset="0"
style="stop-opacity:1;stop-color:#231f20" /><stop
id="stop72"
offset="1"
style="stop-opacity:1;stop-color:#ffffff" /></linearGradient><clipPath
id="clipPath80"
clipPathUnits="userSpaceOnUse"><path
id="path82"
d="m 0,355.159 288.939,0 L 288.939,0 0,0 0,355.159 Z"
inkscape:connector-curvature="0" /></clipPath><clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath16-9"><path
d="m 0,144.916 207.048,0 L 207.048,0 0,0 0,144.916 Z"
id="path18-8"
inkscape:connector-curvature="0" /></clipPath><pattern
id="EMFhbasepattern"
patternUnits="userSpaceOnUse"
width="6"
height="6"
x="0"
y="0" /><clipPath
id="clipPath16-3"
clipPathUnits="userSpaceOnUse"><path
inkscape:connector-curvature="0"
id="path18-6"
d="M 0,355.159 H 288.939 V 0 H 0 Z" /></clipPath><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient48"
id="linearGradient1088"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,6.2488999,6.2488999,0,220.7242,22.255291)"
x1="0"
y1="0"
x2="1"
y2="0"
spreadMethod="pad" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient68"
id="linearGradient1090"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,4.5653,4.5653,0,220.72404,23.09749)"
x1="0"
y1="0"
x2="1"
y2="0"
spreadMethod="pad" /></defs><g
id="g5284"><g
transform="matrix(1.25,0,0,-1.25,-2.0001169e-4,443.94815)"
id="g14-6"
clip-path="url(#clipPath16-3)"><g
id="g20-2"
transform="translate(287.0933,330.9505)"><path
inkscape:connector-curvature="0"
d="m 0,0 c 0,18.693 -11.338,24.208 -20.531,24.208 -2.422,0 -10.812,-0.021 -22.176,-0.052 v -4.312 h -4.434 v 4.299 c -1.58,-0.004 -3.208,-0.009 -4.871,-0.013 v -4.286 h -4.434 v 4.273 c -1.598,-0.004 -3.223,-0.009 -4.871,-0.014 v -4.259 h -4.433 v 4.247 c -1.61,-0.005 -3.235,-0.009 -4.871,-0.014 v -4.233 h -4.434 v 4.22 c -1.619,-0.004 -3.243,-0.009 -4.871,-0.013 v -4.207 h -4.434 v 4.194 c -1.627,-0.004 -3.251,-0.009 -4.871,-0.013 v -4.181 h -4.434 v 4.168 c -1.635,-0.004 -3.26,-0.009 -4.871,-0.013 v -4.155 h -4.433 v 4.143 c -1.647,-0.004 -3.272,-0.009 -4.871,-0.013 v -4.13 h -4.434 v 4.119 c -1.661,-0.005 -3.288,-0.009 -4.871,-0.013 v -4.106 h -4.434 v 4.095 c -1.692,-0.004 -3.313,-0.007 -4.871,-0.011 v -4.084 h -4.434 v 4.075 c -1.755,-0.004 -3.386,-0.007 -4.871,-0.01 v -4.065 h -4.433 v 4.059 c -0.919,-10e-4 -1.743,-10e-4 -2.436,-10e-4 -0.693,0 -1.517,0 -2.435,10e-4 v -4.059 h -4.434 v 4.065 c -1.485,0.003 -3.116,0.006 -4.871,0.01 v -4.075 h -4.434 v 4.084 c -1.558,0.004 -3.179,0.007 -4.871,0.011 v -4.095 h -4.434 v 4.106 c -1.582,0.004 -3.21,0.008 -4.871,0.013 v -4.119 h -4.433 v 4.13 c -1.6,0.004 -3.225,0.009 -4.871,0.013 v -4.143 h -4.434 v 4.155 c -1.61,0.004 -3.235,0.009 -4.871,0.013 v -4.168 h -4.434 v 4.181 c -1.619,0.004 -3.244,0.009 -4.871,0.013 v -4.194 h -4.433 v 4.207 c -1.628,0.004 -3.253,0.009 -4.871,0.013 v -4.22 h -4.434 v 4.233 c -1.637,0.005 -3.262,0.009 -4.871,0.014 v -4.247 h -4.434 v 4.259 c -1.648,0.005 -3.273,0.01 -4.871,0.014 v -4.273 h -4.434 v 4.286 c -1.662,0.004 -3.29,0.009 -4.871,0.013 v -4.299 h -4.433 v 4.312 c -11.365,0.031 -19.754,0.052 -22.176,0.052 -9.193,0 -20.531,-5.515 -20.531,-24.208 0,-18.693 -3.411,-288.662 -0.96,-304.904 2.452,-18.999 11.645,-26.047 27.886,-26.047 16.241,0 115.697,0.668 115.697,0.668 0,0 99.457,-0.668 115.698,-0.668 16.241,0 25.434,7.048 27.885,26.047 C 3.411,-288.662 0,-18.693 0,0"
style="fill:#d9d9d9;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path22-9" /></g><g
id="g24-1"
transform="translate(267.9272,7.0004)"><path
inkscape:connector-curvature="0"
d="m 0,0 h -245.874 c -8.301,0 -15.093,6.791 -15.093,15.092 v 311.903 c 0,8.3 6.792,15.092 15.093,15.092 H 0 c 8.301,0 15.092,-6.792 15.092,-15.092 V 15.092 C 15.092,6.791 8.301,0 0,0"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path26-2" /></g><g
id="g28-7"
transform="translate(266.9116,8.0005)"><path
inkscape:connector-curvature="0"
d="m 0,0 h -244.054 c -8.255,-0.359 -15.516,6.858 -14.998,14.998 V 325.3 c -0.518,8.335 7.18,15.508 14.998,14.997 H 0 c 8.246,0.467 15.551,-6.575 14.998,-14.997 V 14.998 C 15.595,6.989 8.203,-0.446 0,0"
style="fill:#d9d9d9;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path30-0" /></g><g
id="g32-9"
transform="translate(254.9423,65.6895)"><path
inkscape:connector-curvature="0"
d="m 0,0 h -220.942 c -7.19,0 -13.073,5.883 -13.073,13.072 v 222.921 c 0,7.19 5.883,13.073 13.073,13.073 H 0 c 7.19,0 13.072,-5.883 13.072,-13.073 V 13.072 C 13.072,5.883 7.19,0 0,0"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
id="path34-3" /></g></g><g
transform="matrix(1.25,0,0,-1.25,-2.0001169e-4,443.94815)"
id="g36-6"><g
id="g38-0"><g
id="g44-6"><g
id="g46-2"><path
id="path54-6"
style="fill:url(#linearGradient1088);stroke:none"
d="m 216.273,28.504 c -1.723,0 -3.124,-1.401 -3.124,-3.124 v 0 c 0,-1.723 1.401,-3.125 3.124,-3.125 v 0 h 8.902 c 1.723,0 3.125,1.402 3.125,3.125 v 0 c 0,1.723 -1.402,3.124 -3.125,3.124 v 0 z"
inkscape:connector-curvature="0" /></g></g></g></g><g
transform="matrix(1.25,0,0,-1.25,-2.0001169e-4,443.94815)"
id="g56-1"><g
id="g58-8"><g
id="g64-7"><g
id="g66-9"><path
id="path74-2"
style="fill:url(#linearGradient1090);stroke:none"
d="m 216.194,27.662 c -1.212,0 -2.204,-0.991 -2.204,-2.204 v 0 -0.156 c 0,-1.213 0.992,-2.204 2.204,-2.204 v 0 h 9.06 c 1.212,0 2.204,0.991 2.204,2.204 v 0 0.156 c 0,1.213 -0.992,2.204 -2.204,2.204 v 0 z"
inkscape:connector-curvature="0" /></g></g></g></g><g
transform="matrix(1.25,0,0,-1.25,281.56693,415.07628)"
id="g84-0"><path
id="path86-23"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -9.059 c -1.213,0 -2.204,0.992 -2.204,2.204 v 0.157 c 0,1.212 0.991,2.204 2.204,2.204 H 0 c 1.212,0 2.204,-0.992 2.204,-2.204 V 2.204 C 2.204,0.992 1.212,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,224.39855,337.65765)"
id="g88-7"><path
id="path90-5"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -70.88 c -3.268,0 -5.942,2.674 -5.942,5.942 V 37.84 c 0,3.268 2.674,5.942 5.942,5.942 H 0 c 3.268,0 5.942,-2.674 5.942,-5.942 V 5.942 C 5.942,2.674 3.268,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,180.58492,206.17028)"
id="g92-9"><path
id="path94-2"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 13.34,0 71.377,2.497 81.42,3.324 10.043,0.827 14.002,3.935 16.187,7.207 2.367,3.545 2.6,10.28 2.127,14.888 -0.473,4.608 -5.908,5.317 -7.916,5.317 H 0 0.003 -91.814 c -2.009,0 -7.444,-0.709 -7.917,-5.317 -0.472,-4.608 -0.24,-11.343 2.127,-14.888 2.185,-3.272 6.144,-6.38 16.187,-7.207 C -71.374,2.497 -13.337,0 0.003,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,251.21567,331.9934)"
id="g96-2"><path
id="path98-8"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 31.857 c 0,4.594 3.725,8.319 8.319,8.319 h 25.139 c 4.594,0 8.319,-3.725 8.319,-8.319 V 0 c 0,-4.594 -3.725,-8.319 -8.319,-8.319 H 8.319 C 3.725,-8.319 0,-4.594 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,292.93192,339.31515)"
id="g100-97"><path
id="path102-36"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -24.969 c -3.269,0 -5.942,2.674 -5.942,5.942 V 37.63 c 0,3.268 2.673,5.942 5.942,5.942 H 0 c 3.268,0 5.942,-2.674 5.942,-5.942 V 5.942 C 5.942,2.674 3.268,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,57.2483,331.91677)"
id="g104-1"><path
id="path106-2"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 31.857 c 0,4.594 3.725,8.319 8.319,8.319 h 25.138 c 4.595,0 8.319,-3.725 8.319,-8.319 V 0 c 0,-4.594 -3.724,-8.319 -8.319,-8.319 H 8.319 C 3.725,-8.319 0,-4.594 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,98.96405,339.23877)"
id="g108-9"><path
id="path110-31"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -24.969 c -3.269,0 -5.942,2.674 -5.942,5.942 v 31.687 c 0,3.269 2.673,5.942 5.942,5.942 H 0 c 3.268,0 5.942,-2.673 5.942,-5.942 V 5.942 C 5.942,2.674 3.268,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,106.3178,314.78765)"
id="g112-9"><path
id="path114-4"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -36.558 c -0.654,0 -1.189,0.535 -1.189,1.188 v 2.073 c 0,0.654 0.535,1.189 1.189,1.189 H 0 c 0.654,0 1.188,-0.535 1.188,-1.189 V 1.188 C 1.188,0.535 0.654,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,60.6728,309.2254)"
id="g116-7"><path
id="path118-8"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.635,0 -1.144,-0.493 -1.207,-1.112 -1.144,-1.732 -0.635,-2.225 0,-2.225 h 36.474 c 0.635,0 1.144,0.493 1.206,1.113 C 37.618,-0.493 37.109,0 36.474,0 Z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,78.9788,198.17177)"
id="g120-4"><path
id="path122-5"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -0.701 c -0.653,0 -1.188,0.535 -1.188,1.188 v 19.327 c 0,0.654 0.535,1.189 1.188,1.189 H 0 c 0.654,0 1.189,-0.535 1.189,-1.189 V 1.188 C 1.189,0.535 0.654,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,282.1948,198.17177)"
id="g124-0"><path
id="path126-3"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h 0.701 c 0.653,0 1.188,0.535 1.188,1.188 v 19.327 c 0,0.654 -0.535,1.189 -1.188,1.189 H 0 c -0.654,0 -1.188,-0.535 -1.188,-1.189 V 1.188 C -1.188,0.535 -0.654,0 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,184.28155,198.23965)"
id="g128-6"><path
id="path130-1"
style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -1.625,-1.654 -4.284,-1.654 -5.908,0 -1.625,1.654 -4.284,4.361 -5.909,6.016 -1.625,1.654 -0.295,3.007 2.954,3.007 H 2.954 C 6.204,9.023 7.533,7.67 5.908,6.016 4.284,4.361 1.625,1.654 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,313.97355,94.917276)"
id="g136-3"><path
id="path138-2"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-10.443 -8.466,-18.909 -18.909,-18.909 -10.443,0 -18.909,8.466 -18.909,18.909 0,10.443 8.466,18.909 18.909,18.909 C -8.466,18.909 0,10.443 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,313.14817,94.917276)"
id="g140-0"><path
id="path142-6"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-10.079 -8.17,-18.249 -18.249,-18.249 -10.078,0 -18.248,8.17 -18.248,18.249 0,10.078 8.17,18.249 18.248,18.249 C -8.17,18.249 0,10.078 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#7cb832;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,287.8503,97.707151)"
id="g144-1"><path
id="path146-5"
style="fill:#7cb832;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-1.776 -3.22,-3.215 -7.191,-3.215 -3.972,0 -7.191,1.439 -7.191,3.215 0,1.776 3.219,3.215 7.191,3.215 C -3.22,3.215 0,1.776 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#e5dc1d;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,303.94205,104.36377)"
id="g148-5"><path
id="path150-4"
style="fill:#e5dc1d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-1.776 -3.22,-3.215 -7.191,-3.215 -3.972,0 -7.191,1.439 -7.191,3.215 0,1.776 3.219,3.215 7.191,3.215 C -3.22,3.215 0,1.776 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#c21e27;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,305.02417,101.72628)"
id="g152-7"><path
id="path154-6"
style="fill:#c21e27;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.866,3.601 -4.004,7.58 -8.057,5.85 3.3,7.612 9.527,6.401 11.69,3.806 C 5.317,7.635 5.276,0.724 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#1d54b8;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,289.18142,94.448526)"
id="g156-5"><path
id="path158-6"
style="fill:#1d54b8;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.866,3.601 -4.004,7.58 -8.057,5.85 3.3,7.612 9.527,6.401 11.69,3.806 C 5.317,7.635 5.276,0.724 0,0"
inkscape:connector-curvature="0" /></g><path
id="path160-9"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 51.3273,50.504401 h -0.77 V 8.3094006 h 0.77 z"
inkscape:connector-curvature="0" /><path
id="path162-3"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 310.61605,50.504401 h -0.77 V 8.3094006 h 0.77 z"
inkscape:connector-curvature="0" /><path
id="path164-7"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 315.96105,433.96315 h -0.77 V 361.8319 h 0.77 z"
inkscape:connector-curvature="0" /><path
id="path166-4"
style="fill:#4c4c4c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 45.97855,433.96315 h -0.77 v -72.1275 h 0.77 z"
inkscape:connector-curvature="0" /><g
transform="translate(0,2.1381603)"
id="g5021"><g
id="g4865"
transform="matrix(0.24632195,0,0,0.24632195,56.776876,387.60389)"
style="fill:#4c4c4c;fill-opacity:1"><path
d="M 44.922,42.076 V 0 H 32.266 V 29.421 L 13.603,0 H 0 V 42.076 H 12.655 V 11.707 l 19.61,30.369 z"
id="path2"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="M 65.486,42.076 V 13.604 H 52.832 v 28.473 z"
id="path4"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="M 65.486,7.594 V 0 H 52.832 v 7.594 z"
id="path6"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="M 109.777,42.076 V 22.464 c 0,-4.114 -7.908,-9.808 -12.021,-9.808 h -3.797 c -2.846,0 -6.01,2.529 -8.857,3.795 V 13.604 H 72.447 V 42.077 H 85.101 V 22.464 c 0,-1.899 4.43,-4.114 6.329,-4.114 1.897,0 5.377,2.214 5.377,4.114 v 19.613 z"
id="path8"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><g
id="_x33_162_1_"
style="fill:#4c4c4c;fill-opacity:1"><path
d="M 214.811,42.077 V 22.463 c 0,-4.111 -7.908,-9.807 -12.025,-9.807 h -3.795 c -2.847,0 -6.009,2.53 -8.858,3.795 v -2.847 h -12.654 v 28.473 h 12.654 V 22.463 c 0,-1.897 4.432,-4.111 6.325,-4.111 1.896,0 5.381,2.214 5.381,4.111 v 19.614 z"
id="path10"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /></g><path
d="M 130.338,42.076 V 13.604 h 6.646 V 9.807 h -6.646 v -6.01 h -12.967 v 6.01 h -6.646 v 3.797 h 6.646 v 28.473 z"
id="path13"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="m 154.7,12.655 c -10.122,0 -18.663,6.959 -18.663,15.5 0,8.86 8.542,15.818 18.663,15.818 8.857,0 16.135,-5.062 18.033,-11.703 h -12.971 v 3.795 c 0,3.163 -2.213,4.112 -5.063,4.112 -2.849,0 -4.744,-0.949 -4.744,-4.112 v -7.909 h 23.412 C 173.368,19.615 165.139,12.655 154.7,12.655 Z m 0,2.848 c 2.85,0 5.063,1.898 5.063,5.062 v 2.848 h -9.807 v -2.849 c -10e-4,-3.163 1.895,-5.061 4.744,-5.061 z"
id="path15"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="m 279.349,12.655 c -10.442,0 -18.666,6.959 -18.666,15.5 0,8.86 8.224,15.818 18.666,15.818 10.118,0 18.663,-6.958 18.663,-15.818 0,-8.54 -8.545,-15.5 -18.663,-15.5 z m 0,2.848 c 2.846,0 4.746,1.898 4.746,5.062 v 15.503 c 0,3.163 -1.9,4.112 -4.746,4.112 -3.164,0 -5.063,-0.949 -5.063,-4.112 V 20.563 c 10e-4,-3.162 1.899,-5.06 5.063,-5.06 z"
id="path17"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /><path
d="m 242.968,0 v 15.502 c 0,0 -3.801,-2.847 -8.861,-2.847 -7.909,0 -14.553,6.959 -14.553,14.551 0,7.91 6.644,15.819 14.553,15.819 5.062,0 8.861,-1.898 8.861,-1.898 v 0.949 h 12.651 V 0 Z m -4.749,17.401 c 2.848,0 4.749,2.214 4.749,5.063 v 11.705 c 0,2.849 -1.901,3.795 -4.749,3.795 -3.164,0 -5.063,-0.947 -5.063,-3.795 V 22.464 c 0.002,-2.849 1.899,-5.063 5.063,-5.063 z"
id="path19"
inkscape:connector-curvature="0"
style="fill:#4c4c4c;fill-opacity:1" /></g><g
transform="matrix(0.32630613,0,0,0.32630613,79.416228,495.22998)"
id="g4879"
style="fill:#4c4c4c;fill-opacity:1"><path
inkscape:connector-curvature="0"
id="path865"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -68.754017,-262.21143 v -4.65321 h 14.805677 q 2.475446,0 2.475446,-2.1621 0,-2.11509 -2.475446,-2.11509 h -7.410672 q -3.901179,0 -5.969273,-1.73908 -2.052427,-1.75475 -2.052427,-5.02923 0,-3.27449 2.021092,-5.01357 2.03676,-1.75474 5.781264,-1.75474 h 16.654428 v 4.70021 h -14.743007 q -2.538116,0 -2.538116,2.0681 0,2.11509 2.538116,2.11509 h 7.567346 q 3.807174,0 5.796931,1.75475 2.005425,1.73908 2.005425,5.01356 0,3.32149 -2.005425,5.07623 -1.989757,1.73908 -5.796931,1.73908 z" /><path
inkscape:connector-curvature="0"
id="path867"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -32.151335,-262.21143 q -4.574876,0 -7.175661,-2.2091 -2.600786,-2.2091 -2.600786,-7.09732 v -13.1606 h 7.175661 v 13.2076 q 0,2.35011 1.206389,3.38416 1.206388,1.03404 3.149144,1.03404 h 6.047609 v -17.6258 h 7.175662 v 22.46702 z" /><path
inkscape:connector-curvature="0"
id="path869"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -13.272138,-262.21143 v -22.46702 H 1.5335383 q 5.0292298,0 7.3793372,2.00542 2.3657745,1.98976 2.3657745,5.45225 0,3.41549 -2.3344398,5.42092 -2.33444,1.98975 -7.4106719,1.98975 h -7.6300154 v 7.59868 z m 16.9991098,-14.99368 q 0,-2.82013 -3.46249153,-2.82013 H -6.0964771 v 5.60892 h 6.36095737 q 3.46249153,0 3.46249153,-2.78879 z" /><path
inkscape:connector-curvature="0"
id="path871"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 37.331657,-280.02524 h -9.259423 q -3.368487,0 -4.872556,1.03405 -1.488401,1.03404 -1.754747,3.10214 h 15.886726 v 4.60621 H 21.444931 q 0.109672,2.02109 1.598073,3.19615 1.504069,1.17505 5.02923,1.17505 h 9.259423 v 4.70021 H 27.163526 q -6.470629,0 -9.76078,-2.82012 -3.274483,-2.8358 -3.274483,-8.41339 0,-5.57759 3.274483,-8.39772 3.290151,-2.83579 9.76078,-2.83579 h 10.168131 z" /><path
inkscape:connector-curvature="0"
id="path873"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 58.417184,-277.93096 c 0,-2.05764 -1.154164,-2.09428 -3.462491,-2.09428 h -7.301001 v 5.24343 h 7.301001 c 2.308327,0 3.462491,-1.04971 3.462491,-3.14915 z m -4.271563,7.75536 h -6.491929 v 7.96417 h -7.175661 v -22.46702 h 16.215741 c 3.143921,0 5.473139,0.7207 6.987653,2.1621 1.524959,1.43095 2.287438,2.29274 2.287438,4.56973 0,2.30833 -0.752035,4.17797 -2.256104,5.60892 -0.762479,0.73115 -1.733856,1.27429 -2.914133,1.62941 l 6.182513,8.49686 h -7.468444 z"
sodipodi:nodetypes="ssccsscccccscsccccc" /><path
inkscape:connector-curvature="0"
id="path875"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 80.596693,-273.44494 q 0,-5.57759 3.274483,-8.39772 3.29015,-2.83579 9.760779,-2.83579 h 10.168135 v 4.65321 h -9.259427 q -3.368487,0 -4.872556,1.03405 -1.488401,1.03404 -1.754747,3.10214 h 15.88673 v 4.60621 H 87.772354 v 9.07141 h -7.175661 z" /><path
inkscape:connector-curvature="0"
id="path877"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 113.99402,-262.21143 q -3.96385,0 -6.11028,-1.83308 -2.14643,-1.84875 -2.14643,-5.10757 0,-3.24314 2.14643,-5.07623 2.14643,-1.84875 6.11028,-1.84875 h 9.96445 v -0.8147 q 0,-1.70775 -0.8147,-2.39711 -0.79904,-0.68937 -2.77313,-0.68937 h -12.92559 v -4.70021 h 13.19194 q 5.56192,0 8.0217,2.11509 2.47544,2.1151 2.47544,6.90932 v 13.44261 z m 9.96445,-9.25942 h -8.03737 q -2.89846,0 -2.89846,2.31877 0,2.33444 2.89846,2.33444 h 8.03737 z" /><path
inkscape:connector-curvature="0"
id="path879"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 161.7012,-262.21143 v -13.44261 q 0,-2.2561 -1.12805,-3.21181 -1.12805,-0.97138 -3.74451,-0.97138 h -1.4884 v 17.6258 h -7.17566 v -17.6258 h -6.04761 v 17.6258 h -7.17566 v -22.46702 h 23.10939 q 5.67159,0 8.24104,2.2091 2.56945,2.2091 2.56945,7.09732 v 13.1606 z" /><path
inkscape:connector-curvature="0"
id="path881"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 178.15353,-284.67845 v 22.46702 h -7.17566 v -22.46702 z" /><path
inkscape:connector-curvature="0"
id="path883"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 204.67773,-279.93124 h -8.60139 q -3.91684,0 -5.67159,1.51974 -1.75475,1.51974 -1.75475,4.96656 0,3.44683 1.72341,4.96656 1.72342,1.51974 5.65593,1.51974 h 8.64839 v 4.74721 h -10.43447 q -6.32962,0 -9.54144,-2.82012 -3.21181,-2.8358 -3.21181,-8.41339 0,-5.56192 3.21181,-8.39772 3.21182,-2.83579 9.54144,-2.83579 h 10.43447 z" /><path
inkscape:connector-curvature="0"
id="path885"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 234.31301,-273.11085 q 0,2.91413 -0.97138,5.0449 -0.97137,2.11509 -2.80446,3.49382 -1.81741,1.36307 -4.43387,2.03676 -2.60078,0.65803 -5.92227,0.65803 -3.32148,0 -5.93794,-0.65803 -2.60078,-0.67369 -4.4182,-2.03676 -1.81741,-1.37873 -2.80446,-3.49382 -0.97138,-2.13077 -0.97138,-5.0449 0,-2.91413 0.97138,-5.02923 0.98705,-2.13076 2.80446,-3.49383 1.81742,-1.37872 4.4182,-2.03676 2.61646,-0.67369 5.93794,-0.67369 3.32149,0 5.92227,0.67369 2.61646,0.65804 4.43387,2.03676 1.83309,1.36307 2.80446,3.49383 0.97138,2.1151 0.97138,5.02923 z m -14.13198,6.4863 q 6.95632,0 6.95632,-6.4863 0,-6.4863 -6.95632,-6.4863 -6.95632,0 -6.95632,6.4863 0,6.4863 6.95632,6.4863 z" /><path
inkscape:connector-curvature="0"
id="path887"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#4c4c4c;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 264.1179,-262.21143 v -13.44261 q 0,-2.2561 -1.12805,-3.21181 -1.12805,-0.97138 -3.7445,-0.97138 h -1.4884 v 17.6258 h -7.17567 v -17.6258 h -6.04761 v 17.6258 h -7.17566 v -22.46702 h 23.10939 q 5.6716,0 8.24105,2.2091 2.56945,2.2091 2.56945,7.09732 v 13.1606 z" /></g></g></g><g
id="g5366"><g
transform="matrix(1.25,0,0,-1.25,524.16922,443.94815)"
id="g20"><path
id="path22"
style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 13.146,0 92.244,1.027 94.026,1.027 8.611,0 9.498,6.072 9.498,8.684 0,2.612 -0.712,119.059 -0.95,125.945 -0.237,6.886 -5.223,7.598 -9.26,7.836 -4.036,0.237 -80.967,1.424 -93.314,1.424 -12.347,0 -89.278,-1.187 -93.314,-1.424 -4.037,-0.238 -9.023,-0.95 -9.26,-7.836 -0.238,-6.886 -0.95,-123.333 -0.95,-125.945 0,-2.612 0.887,-8.684 9.498,-8.684 C -92.244,1.027 -13.146,0 0,0"
inkscape:connector-curvature="0" /></g><path
id="path24-5"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 615.6491,442.97952 h -0.5925 v -178.935 h 0.5925 z"
inkscape:connector-curvature="0" /><path
id="path26"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 433.2491,442.99202 h -0.5925 v -178.935 h 0.5925 z"
inkscape:connector-curvature="0" /><g
transform="matrix(1.25,0,0,-1.25,617.84422,349.72152)"
id="g28"><path
id="path30"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -153.681 c -5.253,0 -9.551,4.298 -9.551,9.551 v 41.787 c 0,5.252 4.298,9.551 9.551,9.551 H 0 c 5.253,0 9.551,-4.299 9.551,-9.551 V 9.551 C 9.551,4.298 5.253,0 0,0"
inkscape:connector-curvature="0" /></g><path
id="path32-2"
style="fill:#4d4d4d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="m 495.18535,349.72202 h 95.7925 v -76.11125 h -95.7925 z"
inkscape:connector-curvature="0" /><g
style="fill:#7cb832;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,428.59573,336.73839)"
id="g34-5"><path
id="path36-4"
style="fill:#7cb832;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-1.105 -2.003,-2.001 -4.475,-2.001 -2.471,0 -4.474,0.896 -4.474,2.001 0,1.105 2.003,2.001 4.474,2.001 C -2.003,2.001 0,1.105 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#e5dc1d;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,438.60872,340.8804)"
id="g38"><path
id="path40-7"
style="fill:#e5dc1d;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-1.105 -2.003,-2.001 -4.475,-2.001 -2.471,0 -4.474,0.896 -4.474,2.001 0,1.105 2.003,2.001 4.474,2.001 C -2.003,2.001 0,1.105 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#c21e27;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,439.28197,339.23927)"
id="g42-4"><path
id="path44-4"
style="fill:#c21e27;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.539,2.241 -2.492,4.717 -5.013,3.64 -2.96,8.376 0.915,7.623 2.26,6.008 3.308,4.751 3.283,0.45 0,0"
inkscape:connector-curvature="0" /></g><g
style="fill:#1d54b8;fill-opacity:1"
transform="matrix(1.25,0,0,-1.25,429.4241,334.71077)"
id="g46"><path
id="path48-3"
style="fill:#1d54b8;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C -0.539,2.241 -2.492,4.717 -5.013,3.64 -2.96,8.376 0.915,7.623 2.26,6.008 3.308,4.751 3.283,0.45 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,410.51685,430.81315)"
id="g50-0"><path
id="path52-7"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-2.113 -1.713,-3.825 -3.826,-3.825 -2.112,0 -3.825,1.712 -3.825,3.825 0,2.113 1.713,3.826 3.825,3.826 C -1.713,3.826 0,2.113 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,637.8216,430.81315)"
id="g54-8"><path
id="path56-6"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,-2.113 1.713,-3.825 3.826,-3.825 2.112,0 3.825,1.712 3.825,3.825 0,2.113 -1.713,3.826 -3.825,3.826 C 1.713,3.826 0,2.113 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,594.41772,388.75202)"
id="g58"><path
id="path60-8"
style="fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -112.398 c -2.506,0 -4.556,2.05 -4.556,4.556 v 1.789 c 0,2.506 2.05,4.556 4.556,4.556 H 0 c 2.506,0 4.556,-2.05 4.556,-4.556 V 4.556 C 4.556,2.05 2.506,0 0,0"
inkscape:connector-curvature="0" /></g><path
id="path62-8"
style="fill:#999999;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
d="M 548.40035,386.69577 H 499.7016 v -9.51375 h 48.69875 z"
inkscape:connector-curvature="0" /><g
transform="matrix(1.25,0,0,-1.25,599.58585,378.66752)"
id="g64"><path
id="path66-4"
style="fill:#666666;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 h -120.667 c -0.035,-0.079 -0.067,-0.159 -0.099,-0.24 H 0.099 C 0.068,-0.159 0.036,-0.079 0,0 m 0.364,-1.248 h -121.395 c -0.012,-0.08 -0.026,-0.16 -0.034,-0.241 H 0.398 C 0.39,-1.408 0.376,-1.328 0.364,-1.248 m -1.183,2.496 h -119.029 c -0.07,-0.078 -0.14,-0.157 -0.205,-0.24 H -0.613 C -0.679,1.091 -0.748,1.17 -0.819,1.248 M -121.088,-2.737 H 0.422 v 0.24 h -121.51 z m 1.241,-3.746 H -0.819 c 0.071,0.079 0.14,0.158 0.206,0.241 h -119.44 c 0.065,-0.083 0.135,-0.162 0.206,-0.241 m -0.819,1.249 H 0 c 0.036,0.079 0.068,0.159 0.099,0.24 h -120.865 c 0.032,-0.081 0.064,-0.161 0.1,-0.24 m -0.365,1.248 H 0.364 c 0.012,0.08 0.026,0.159 0.034,0.241 h -121.463 c 0.008,-0.082 0.022,-0.161 0.034,-0.241"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,598.26823,292.27127)"
id="g68-3"><path
id="path70-1"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c -1.809,0 -3.017,1.282 -3.017,2.836 0,1.555 1.211,2.851 3.014,2.847 H 17.038 C 18.841,5.687 20.052,4.391 20.052,2.836 20.052,1.282 18.844,0 17.035,0 Z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,598.27535,286.0414)"
id="g72-4"><path
id="path74"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c -1.432,-0.003 -2.311,-0.96 -2.311,-2.144 0,-1.183 0.873,-2.148 2.311,-2.143 h 17.023 c 1.438,-0.005 2.312,0.96 2.312,2.143 0,1.184 -0.879,2.141 -2.312,2.144 z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,597.35735,287.04127)"
id="g76"><path
id="path78-9"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="M 0,0 H 0.833 L 1.987,-1.866 1.986,0 H 2.813 V -2.676 H 1.987 L 0.828,-0.81 V -2.676 H 0 Z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,606.49447,287.38552)"
id="g80-2"><path
id="path82-0"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="M 0,0 H 0.805 V -0.36 H 1.241 V -0.624 H 0.805 L 0.806,-2.4 H 0 v 1.776 h -0.437 v 0.264 h 0.438 z"
inkscape:connector-curvature="0" /></g><path
id="path84-6"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25"
d="m 601.4491,288.16202 h 1.00625 v 2.22375 h -1.00625 z"
inkscape:connector-curvature="0" /><path
id="path86"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.25"
d="m 601.44785,287.04077 h 1.0075 v 0.68375 h -1.0075 z"
inkscape:connector-curvature="0" /><g
transform="matrix(1.25,0,0,-1.25,619.07272,288.00989)"
id="g88"><path
id="path90"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c -0.649,0 -1.175,-0.447 -1.175,-0.999 0,-0.552 0.526,-0.999 1.175,-0.999 0.65,0 1.176,0.447 1.176,0.999 C 1.176,-0.447 0.65,0 0,0 m 0.323,-0.997 c 0,0 -0.001,-0.268 -0.001,-0.377 0,-0.283 -0.167,-0.4 -0.328,-0.4 -0.161,0 -0.33,0.117 -0.33,0.4 0,0.109 0.001,0.384 0.001,0.384 0,0 0,0.263 0,0.371 0,0.282 0.168,0.398 0.329,0.398 0.16,0 0.328,-0.116 0.328,-0.398 0,-0.108 0,-0.307 0.001,-0.379 z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,616.29035,289.26265)"
id="g92"><path
id="path94"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 v 0.318 c 0,0.275 -0.19,0.345 -0.315,0.345 -0.128,0 -0.316,-0.07 -0.316,-0.345 0,-0.091 0.001,-0.317 0.001,-0.317 0,0 -0.001,-0.222 -0.001,-0.317 0,-0.274 0.188,-0.346 0.316,-0.346 0.125,0 0.315,0.072 0.315,0.346 z m -0.006,1.777 h 0.794 v -2.675 h -0.795 c 0,0 0,0.086 0,0.102 -0.308,-0.193 -0.656,-0.192 -0.927,-0.066 -0.072,0.033 -0.55,0.263 -0.55,0.882 0,0.47 0.443,0.982 1.023,0.931 0.191,-0.017 0.327,-0.086 0.455,-0.158 z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,604.80935,288.05914)"
id="g96"><path
id="path98"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c 0.301,0.008 0.911,-0.189 0.907,-0.893 -0.001,-0.125 0,-0.968 0,-0.968 h -0.8 v 1.169 c 0,0.155 -0.148,0.327 -0.367,0.327 -0.22,0 -0.382,-0.172 -0.382,-0.327 0,-0.076 0.001,-1.169 0.001,-1.169 H -1.44 l -0.001,1.779 0.8,0.001 c 0,0 -0.001,-0.144 0,-0.187 C -0.488,-0.122 -0.266,-0.008 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,612.98247,288.05914)"
id="g100"><path
id="path102"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="M 0,0 C 0.3,0.008 0.911,-0.189 0.907,-0.893 0.906,-1.018 0.906,-1.861 0.906,-1.861 H 0.107 v 1.169 c 0,0.155 -0.148,0.327 -0.367,0.327 -0.219,0 -0.383,-0.172 -0.383,-0.327 0,-0.076 0.001,-1.169 0.001,-1.169 H -1.44 v 1.779 l 0.798,0.001 c 0,0 -0.001,-0.144 0,-0.187 C -0.487,-0.122 -0.266,-0.008 0,0"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,609.81772,289.60764)"
id="g104"><path
id="path106"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c 0,0 0.001,-0.008 0.001,-0.108 0,-0.326 -0.214,-0.398 -0.333,-0.398 -0.119,0 -0.337,0.072 -0.337,0.398 0,0.098 0.001,0.367 0.001,0.367 h 1.516 c 0,0.552 -0.533,1.009 -1.187,1.009 -0.654,0 -1.185,-0.447 -1.185,-0.998 0,-0.552 0.531,-1 1.185,-1 0.543,0 1.001,0.31 1.141,0.731 z m -0.668,0.537 c -0.002,0.155 0.002,0.259 0.053,0.349 0.063,0.109 0.179,0.161 0.283,0.162 v 0 C -0.227,1.047 -0.112,0.995 -0.049,0.886 0.002,0.796 0.005,0.692 0.004,0.537 Z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,620.75035,287.40889)"
id="g108"><path
id="path110"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="m 0,0 c 0.078,0 0.148,0.005 0.148,0.099 0,0.075 -0.069,0.09 -0.132,0.09 H -0.11 V 0 Z m -0.11,-0.342 h -0.093 v 0.609 h 0.232 c 0.144,0 0.215,-0.053 0.215,-0.173 0,-0.109 -0.068,-0.157 -0.158,-0.168 L 0.259,-0.342 H 0.157 l -0.162,0.264 H -0.11 Z"
inkscape:connector-curvature="0" /></g><g
transform="matrix(1.25,0,0,-1.25,620.75172,288.00614)"
id="g112"><path
id="path114"
style="fill:#e10025;fill-opacity:1;fill-rule:evenodd;stroke:none"
d="M 0,0 C 0.239,0 0.427,0.187 0.427,0.442 0.427,0.691 0.239,0.88 0,0.88 -0.241,0.88 -0.43,0.691 -0.43,0.442 -0.43,0.187 -0.241,0 0,0 m -0.536,0.442 c 0,0.303 0.246,0.526 0.536,0.526 0.288,0 0.534,-0.223 0.534,-0.526 0,-0.307 -0.246,-0.53 -0.534,-0.53 -0.29,0 -0.536,0.223 -0.536,0.53"
inkscape:connector-curvature="0" /></g><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,343.86112 Z"
id="path3509-8"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,342.34034 Z"
id="path3511-9"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,340.84343 Z"
id="path3513-2"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,341.59188 Z"
id="path3515-6"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,344.60958 Z"
id="path3517-6"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,343.08879 Z"
id="path3519-4"
inkscape:connector-curvature="0" /><path
style="fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 553.76867,340.09498 Z"
id="path3521-9"
inkscape:connector-curvature="0" /><g
style="fill:#ff0000;fill-opacity:1"
transform="matrix(0.64544276,0,0,0.64544276,382.17818,33.695771)"
id="g5021-4"><g
id="g4865-0"
transform="matrix(0.24632195,0,0,0.24632195,56.776876,387.60389)"
style="fill:#ff0000;fill-opacity:1"><path
d="M 44.922,42.076 V 0 H 32.266 V 29.421 L 13.603,0 H 0 V 42.076 H 12.655 V 11.707 l 19.61,30.369 z"
id="path2-5"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="M 65.486,42.076 V 13.604 H 52.832 v 28.473 z"
id="path4-9"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="M 65.486,7.594 V 0 H 52.832 v 7.594 z"
id="path6-4"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="M 109.777,42.076 V 22.464 c 0,-4.114 -7.908,-9.808 -12.021,-9.808 h -3.797 c -2.846,0 -6.01,2.529 -8.857,3.795 V 13.604 H 72.447 V 42.077 H 85.101 V 22.464 c 0,-1.899 4.43,-4.114 6.329,-4.114 1.897,0 5.377,2.214 5.377,4.114 v 19.613 z"
id="path8-6"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><g
id="_x33_162_1_-9"
style="fill:#ff0000;fill-opacity:1"><path
d="M 214.811,42.077 V 22.463 c 0,-4.111 -7.908,-9.807 -12.025,-9.807 h -3.795 c -2.847,0 -6.009,2.53 -8.858,3.795 v -2.847 h -12.654 v 28.473 h 12.654 V 22.463 c 0,-1.897 4.432,-4.111 6.325,-4.111 1.896,0 5.381,2.214 5.381,4.111 v 19.614 z"
id="path10-2"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /></g><path
d="M 130.338,42.076 V 13.604 h 6.646 V 9.807 h -6.646 v -6.01 h -12.967 v 6.01 h -6.646 v 3.797 h 6.646 v 28.473 z"
id="path13-2"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="m 154.7,12.655 c -10.122,0 -18.663,6.959 -18.663,15.5 0,8.86 8.542,15.818 18.663,15.818 8.857,0 16.135,-5.062 18.033,-11.703 h -12.971 v 3.795 c 0,3.163 -2.213,4.112 -5.063,4.112 -2.849,0 -4.744,-0.949 -4.744,-4.112 v -7.909 h 23.412 C 173.368,19.615 165.139,12.655 154.7,12.655 Z m 0,2.848 c 2.85,0 5.063,1.898 5.063,5.062 v 2.848 h -9.807 v -2.849 c -10e-4,-3.163 1.895,-5.061 4.744,-5.061 z"
id="path15-4"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="m 279.349,12.655 c -10.442,0 -18.666,6.959 -18.666,15.5 0,8.86 8.224,15.818 18.666,15.818 10.118,0 18.663,-6.958 18.663,-15.818 0,-8.54 -8.545,-15.5 -18.663,-15.5 z m 0,2.848 c 2.846,0 4.746,1.898 4.746,5.062 v 15.503 c 0,3.163 -1.9,4.112 -4.746,4.112 -3.164,0 -5.063,-0.949 -5.063,-4.112 V 20.563 c 10e-4,-3.162 1.899,-5.06 5.063,-5.06 z"
id="path17-7"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /><path
d="m 242.968,0 v 15.502 c 0,0 -3.801,-2.847 -8.861,-2.847 -7.909,0 -14.553,6.959 -14.553,14.551 0,7.91 6.644,15.819 14.553,15.819 5.062,0 8.861,-1.898 8.861,-1.898 v 0.949 h 12.651 V 0 Z m -4.749,17.401 c 2.848,0 4.749,2.214 4.749,5.063 v 11.705 c 0,2.849 -1.901,3.795 -4.749,3.795 -3.164,0 -5.063,-0.947 -5.063,-3.795 V 22.464 c 0.002,-2.849 1.899,-5.063 5.063,-5.063 z"
id="path19-7"
inkscape:connector-curvature="0"
style="fill:#ff0000;fill-opacity:1" /></g><g
transform="matrix(0.32630613,0,0,0.32630613,79.416228,495.22998)"
id="g4879-5"
style="fill:#ff0000;fill-opacity:1"><path
inkscape:connector-curvature="0"
id="path865-4"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -68.754017,-262.21143 v -4.65321 h 14.805677 q 2.475446,0 2.475446,-2.1621 0,-2.11509 -2.475446,-2.11509 h -7.410672 q -3.901179,0 -5.969273,-1.73908 -2.052427,-1.75475 -2.052427,-5.02923 0,-3.27449 2.021092,-5.01357 2.03676,-1.75474 5.781264,-1.75474 h 16.654428 v 4.70021 h -14.743007 q -2.538116,0 -2.538116,2.0681 0,2.11509 2.538116,2.11509 h 7.567346 q 3.807174,0 5.796931,1.75475 2.005425,1.73908 2.005425,5.01356 0,3.32149 -2.005425,5.07623 -1.989757,1.73908 -5.796931,1.73908 z" /><path
inkscape:connector-curvature="0"
id="path867-8"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -32.151335,-262.21143 q -4.574876,0 -7.175661,-2.2091 -2.600786,-2.2091 -2.600786,-7.09732 v -13.1606 h 7.175661 v 13.2076 q 0,2.35011 1.206389,3.38416 1.206388,1.03404 3.149144,1.03404 h 6.047609 v -17.6258 h 7.175662 v 22.46702 z" /><path
inkscape:connector-curvature="0"
id="path869-1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m -13.272138,-262.21143 v -22.46702 H 1.5335383 q 5.0292298,0 7.3793372,2.00542 2.3657745,1.98976 2.3657745,5.45225 0,3.41549 -2.3344398,5.42092 -2.33444,1.98975 -7.4106719,1.98975 h -7.6300154 v 7.59868 z m 16.9991098,-14.99368 q 0,-2.82013 -3.46249153,-2.82013 H -6.0964771 v 5.60892 h 6.36095737 q 3.46249153,0 3.46249153,-2.78879 z" /><path
inkscape:connector-curvature="0"
id="path871-2"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 37.331657,-280.02524 h -9.259423 q -3.368487,0 -4.872556,1.03405 -1.488401,1.03404 -1.754747,3.10214 h 15.886726 v 4.60621 H 21.444931 q 0.109672,2.02109 1.598073,3.19615 1.504069,1.17505 5.02923,1.17505 h 9.259423 v 4.70021 H 27.163526 q -6.470629,0 -9.76078,-2.82012 -3.274483,-2.8358 -3.274483,-8.41339 0,-5.57759 3.274483,-8.39772 3.290151,-2.83579 9.76078,-2.83579 h 10.168131 z" /><path
inkscape:connector-curvature="0"
id="path873-8"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 58.417184,-277.93096 c 0,-2.05764 -1.154164,-2.09428 -3.462491,-2.09428 h -7.301001 v 5.24343 h 7.301001 c 2.308327,0 3.462491,-1.04971 3.462491,-3.14915 z m -4.271563,7.75536 h -6.491929 v 7.96417 h -7.175661 v -22.46702 h 16.215741 c 3.143921,0 5.473139,0.7207 6.987653,2.1621 1.524959,1.43095 2.287438,2.29274 2.287438,4.56973 0,2.30833 -0.752035,4.17797 -2.256104,5.60892 -0.762479,0.73115 -1.733856,1.27429 -2.914133,1.62941 l 6.182513,8.49686 h -7.468444 z"
sodipodi:nodetypes="ssccsscccccscsccccc" /><path
inkscape:connector-curvature="0"
id="path875-9"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 80.596693,-273.44494 q 0,-5.57759 3.274483,-8.39772 3.29015,-2.83579 9.760779,-2.83579 h 10.168135 v 4.65321 h -9.259427 q -3.368487,0 -4.872556,1.03405 -1.488401,1.03404 -1.754747,3.10214 h 15.88673 v 4.60621 H 87.772354 v 9.07141 h -7.175661 z" /><path
inkscape:connector-curvature="0"
id="path877-3"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 113.99402,-262.21143 q -3.96385,0 -6.11028,-1.83308 -2.14643,-1.84875 -2.14643,-5.10757 0,-3.24314 2.14643,-5.07623 2.14643,-1.84875 6.11028,-1.84875 h 9.96445 v -0.8147 q 0,-1.70775 -0.8147,-2.39711 -0.79904,-0.68937 -2.77313,-0.68937 h -12.92559 v -4.70021 h 13.19194 q 5.56192,0 8.0217,2.11509 2.47544,2.1151 2.47544,6.90932 v 13.44261 z m 9.96445,-9.25942 h -8.03737 q -2.89846,0 -2.89846,2.31877 0,2.33444 2.89846,2.33444 h 8.03737 z" /><path
inkscape:connector-curvature="0"
id="path879-6"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 161.7012,-262.21143 v -13.44261 q 0,-2.2561 -1.12805,-3.21181 -1.12805,-0.97138 -3.74451,-0.97138 h -1.4884 v 17.6258 h -7.17566 v -17.6258 h -6.04761 v 17.6258 h -7.17566 v -22.46702 h 23.10939 q 5.67159,0 8.24104,2.2091 2.56945,2.2091 2.56945,7.09732 v 13.1606 z" /><path
inkscape:connector-curvature="0"
id="path881-8"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 178.15353,-284.67845 v 22.46702 h -7.17566 v -22.46702 z" /><path
inkscape:connector-curvature="0"
id="path883-0"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 204.67773,-279.93124 h -8.60139 q -3.91684,0 -5.67159,1.51974 -1.75475,1.51974 -1.75475,4.96656 0,3.44683 1.72341,4.96656 1.72342,1.51974 5.65593,1.51974 h 8.64839 v 4.74721 h -10.43447 q -6.32962,0 -9.54144,-2.82012 -3.21181,-2.8358 -3.21181,-8.41339 0,-5.56192 3.21181,-8.39772 3.21182,-2.83579 9.54144,-2.83579 h 10.43447 z" /><path
inkscape:connector-curvature="0"
id="path885-2"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 234.31301,-273.11085 q 0,2.91413 -0.97138,5.0449 -0.97137,2.11509 -2.80446,3.49382 -1.81741,1.36307 -4.43387,2.03676 -2.60078,0.65803 -5.92227,0.65803 -3.32148,0 -5.93794,-0.65803 -2.60078,-0.67369 -4.4182,-2.03676 -1.81741,-1.37873 -2.80446,-3.49382 -0.97138,-2.13077 -0.97138,-5.0449 0,-2.91413 0.97138,-5.02923 0.98705,-2.13076 2.80446,-3.49383 1.81742,-1.37872 4.4182,-2.03676 2.61646,-0.67369 5.93794,-0.67369 3.32149,0 5.92227,0.67369 2.61646,0.65804 4.43387,2.03676 1.83309,1.36307 2.80446,3.49383 0.97138,2.1151 0.97138,5.02923 z m -14.13198,6.4863 q 6.95632,0 6.95632,-6.4863 0,-6.4863 -6.95632,-6.4863 -6.95632,0 -6.95632,6.4863 0,6.4863 6.95632,6.4863 z" /><path
inkscape:connector-curvature="0"
id="path887-1"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:32.08679962px;line-height:1.25;font-family:'Super FamiFont';-inkscape-font-specification:'Super FamiFont';fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.80216902"
d="m 264.1179,-262.21143 v -13.44261 q 0,-2.2561 -1.12805,-3.21181 -1.12805,-0.97138 -3.7445,-0.97138 h -1.4884 v 17.6258 h -7.17567 v -17.6258 h -6.04761 v 17.6258 h -7.17566 v -22.46702 h 23.10939 q 5.6716,0 8.24105,2.2091 2.56945,2.2091 2.56945,7.09732 v 13.1606 z" /></g></g></g></svg>

After

Width:  |  Height:  |  Size: 54 KiB

View file

@ -0,0 +1,241 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_attr_file_h__
#define INCLUDE_attr_file_h__
#include "common.h"
#include "git2/oid.h"
#include "git2/attr.h"
#include "vector.h"
#include "pool.h"
#include "str.h"
#include "futils.h"
#define GIT_ATTR_FILE ".gitattributes"
#define GIT_ATTR_FILE_INREPO "attributes"
#define GIT_ATTR_FILE_SYSTEM "gitattributes"
#define GIT_ATTR_FILE_XDG "attributes"
#define GIT_ATTR_FNMATCH_NEGATIVE (1U << 0)
#define GIT_ATTR_FNMATCH_DIRECTORY (1U << 1)
#define GIT_ATTR_FNMATCH_FULLPATH (1U << 2)
#define GIT_ATTR_FNMATCH_MACRO (1U << 3)
#define GIT_ATTR_FNMATCH_IGNORE (1U << 4)
#define GIT_ATTR_FNMATCH_HASWILD (1U << 5)
#define GIT_ATTR_FNMATCH_ALLOWSPACE (1U << 6)
#define GIT_ATTR_FNMATCH_ICASE (1U << 7)
#define GIT_ATTR_FNMATCH_MATCH_ALL (1U << 8)
#define GIT_ATTR_FNMATCH_ALLOWNEG (1U << 9)
#define GIT_ATTR_FNMATCH_ALLOWMACRO (1U << 10)
#define GIT_ATTR_FNMATCH__INCOMING \
(GIT_ATTR_FNMATCH_ALLOWSPACE | GIT_ATTR_FNMATCH_ALLOWNEG | GIT_ATTR_FNMATCH_ALLOWMACRO)
typedef enum {
GIT_ATTR_FILE_SOURCE_MEMORY = 0,
GIT_ATTR_FILE_SOURCE_FILE = 1,
GIT_ATTR_FILE_SOURCE_INDEX = 2,
GIT_ATTR_FILE_SOURCE_HEAD = 3,
GIT_ATTR_FILE_SOURCE_COMMIT = 4,
GIT_ATTR_FILE_NUM_SOURCES = 5
} git_attr_file_source_t;
typedef struct {
/* The source location for the attribute file. */
git_attr_file_source_t type;
/*
* The filename of the attribute file to read (relative to the
* given base path).
*/
const char *base;
const char *filename;
/*
* The commit ID when the given source type is a commit (or NULL
* for the repository's HEAD commit.)
*/
git_oid *commit_id;
} git_attr_file_source;
extern const char *git_attr__true;
extern const char *git_attr__false;
extern const char *git_attr__unset;
typedef struct {
char *pattern;
size_t length;
char *containing_dir;
size_t containing_dir_length;
unsigned int flags;
} git_attr_fnmatch;
typedef struct {
git_attr_fnmatch match;
git_vector assigns; /* vector of <git_attr_assignment*> */
} git_attr_rule;
typedef struct {
git_refcount unused;
const char *name;
uint32_t name_hash;
} git_attr_name;
typedef struct {
git_refcount rc; /* for macros */
char *name;
uint32_t name_hash;
const char *value;
} git_attr_assignment;
typedef struct git_attr_file_entry git_attr_file_entry;
typedef struct {
git_refcount rc;
git_mutex lock;
git_attr_file_entry *entry;
git_attr_file_source source;
git_vector rules; /* vector of <rule*> or <fnmatch*> */
git_pool pool;
unsigned int nonexistent:1;
int session_key;
union {
git_oid oid;
git_futils_filestamp stamp;
} cache_data;
} git_attr_file;
struct git_attr_file_entry {
git_attr_file *file[GIT_ATTR_FILE_NUM_SOURCES];
const char *path; /* points into fullpath */
char fullpath[GIT_FLEX_ARRAY];
};
typedef struct {
git_str full;
char *path;
char *basename;
int is_dir;
} git_attr_path;
/* A git_attr_session can provide an "instance" of reading, to prevent cache
* invalidation during a single operation instance (like checkout).
*/
typedef struct {
int key;
unsigned int init_setup:1,
init_sysdir:1;
git_str sysdir;
git_str tmp;
} git_attr_session;
extern int git_attr_session__init(git_attr_session *attr_session, git_repository *repo);
extern void git_attr_session__free(git_attr_session *session);
extern int git_attr_get_many_with_session(
const char **values_out,
git_repository *repo,
git_attr_session *attr_session,
git_attr_options *opts,
const char *path,
size_t num_attr,
const char **names);
typedef int (*git_attr_file_parser)(
git_repository *repo,
git_attr_file *file,
const char *data,
bool allow_macros);
/*
* git_attr_file API
*/
int git_attr_file__new(
git_attr_file **out,
git_attr_file_entry *entry,
git_attr_file_source *source);
void git_attr_file__free(git_attr_file *file);
int git_attr_file__load(
git_attr_file **out,
git_repository *repo,
git_attr_session *attr_session,
git_attr_file_entry *ce,
git_attr_file_source *source,
git_attr_file_parser parser,
bool allow_macros);
int git_attr_file__load_standalone(
git_attr_file **out, const char *path);
int git_attr_file__out_of_date(
git_repository *repo, git_attr_session *session, git_attr_file *file, git_attr_file_source *source);
int git_attr_file__parse_buffer(
git_repository *repo, git_attr_file *attrs, const char *data, bool allow_macros);
int git_attr_file__clear_rules(
git_attr_file *file, bool need_lock);
int git_attr_file__lookup_one(
git_attr_file *file,
git_attr_path *path,
const char *attr,
const char **value);
/* loop over rules in file from bottom to top */
#define git_attr_file__foreach_matching_rule(file, path, iter, rule) \
git_vector_rforeach(&(file)->rules, (iter), (rule)) \
if (git_attr_rule__match((rule), (path)))
uint32_t git_attr_file__name_hash(const char *name);
/*
* other utilities
*/
extern int git_attr_fnmatch__parse(
git_attr_fnmatch *spec,
git_pool *pool,
const char *source,
const char **base);
extern bool git_attr_fnmatch__match(
git_attr_fnmatch *rule,
git_attr_path *path);
extern void git_attr_rule__free(git_attr_rule *rule);
extern bool git_attr_rule__match(
git_attr_rule *rule,
git_attr_path *path);
extern git_attr_assignment *git_attr_rule__lookup_assignment(
git_attr_rule *rule, const char *name);
typedef enum { GIT_DIR_FLAG_TRUE = 1, GIT_DIR_FLAG_FALSE = 0, GIT_DIR_FLAG_UNKNOWN = -1 } git_dir_flag;
extern int git_attr_path__init(
git_attr_path *out,
const char *path,
const char *base,
git_dir_flag is_dir);
extern void git_attr_path__free(git_attr_path *info);
extern int git_attr_assignment__parse(
git_repository *repo, /* needed to expand macros */
git_pool *pool,
git_vector *assigns,
const char **scan);
#endif

View file

@ -0,0 +1,128 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_refdb_h__
#define INCLUDE_refdb_h__
#include "common.h"
#include "git2/refdb.h"
#include "repository.h"
struct git_refdb {
git_refcount rc;
git_repository *repo;
git_refdb_backend *backend;
};
void git_refdb__free(git_refdb *db);
int git_refdb_exists(
int *exists,
git_refdb *refdb,
const char *ref_name);
int git_refdb_lookup(
git_reference **out,
git_refdb *refdb,
const char *ref_name);
/**
* Resolve the reference by following symbolic references.
*
* Given a reference name, this function will follow any symbolic references up
* to `max_nesting` deep and return the resolved direct reference. If any of
* the intermediate symbolic references points to a non-existing reference,
* then that symbolic reference is returned instead with an error code of `0`.
* If the given reference is a direct reference already, it is returned
* directly.
*
* If `max_nesting` is `0`, the reference will not be resolved. If it's
* negative, it will be set to the default resolve depth which is `5`.
*
* @param out Pointer to store the result in.
* @param db The refdb to use for resolving the reference.
* @param ref_name The reference name to lookup and resolve.
* @param max_nesting The maximum nesting depth.
* @return `0` on success, a negative error code otherwise.
*/
int git_refdb_resolve(
git_reference **out,
git_refdb *db,
const char *ref_name,
int max_nesting);
int git_refdb_rename(
git_reference **out,
git_refdb *db,
const char *old_name,
const char *new_name,
int force,
const git_signature *who,
const char *message);
int git_refdb_iterator(git_reference_iterator **out, git_refdb *db, const char *glob);
int git_refdb_iterator_next(git_reference **out, git_reference_iterator *iter);
int git_refdb_iterator_next_name(const char **out, git_reference_iterator *iter);
void git_refdb_iterator_free(git_reference_iterator *iter);
int git_refdb_write(git_refdb *refdb, git_reference *ref, int force, const git_signature *who, const char *message, const git_oid *old_id, const char *old_target);
int git_refdb_delete(git_refdb *refdb, const char *ref_name, const git_oid *old_id, const char *old_target);
int git_refdb_reflog_read(git_reflog **out, git_refdb *db, const char *name);
int git_refdb_reflog_write(git_reflog *reflog);
/**
* Determine whether a reflog entry should be created for the given reference.
*
* Whether or not writing to a reference should create a reflog entry is
* dependent on a number of things. Most importantly, there's the
* "core.logAllRefUpdates" setting that controls in which situations a
* reference should get a corresponding reflog entry. The following values for
* it are understood:
*
* - "false": Do not log reference updates.
*
* - "true": Log normal reference updates. This will write entries for
* references in "refs/heads", "refs/remotes", "refs/notes" and
* "HEAD" or if the reference already has a log entry.
*
* - "always": Always create a reflog entry.
*
* If unset, the value will default to "true" for non-bare repositories and
* "false" for bare ones.
*
* @param out pointer to which the result will be written, `1` means a reflog
* entry should be written, `0` means none should be written.
* @param db The refdb to decide this for.
* @param ref The reference one wants to check.
* @return `0` on success, a negative error code otherwise.
*/
int git_refdb_should_write_reflog(int *out, git_refdb *db, const git_reference *ref);
/**
* Determine whether a reflog entry should be created for HEAD if creating one
* for the given reference
*
* In case the given reference is being pointed to by HEAD, then creating a
* reflog entry for this reference also requires us to create a corresponding
* reflog entry for HEAD. This function can be used to determine that scenario.
*
* @param out pointer to which the result will be written, `1` means a reflog
* entry should be written, `0` means none should be written.
* @param db The refdb to decide this for.
* @param ref The reference one wants to check.
* @return `0` on success, a negative error code otherwise.
*/
int git_refdb_should_write_head_reflog(int *out, git_refdb *db, const git_reference *ref);
int git_refdb_has_log(git_refdb *db, const char *refname);
int git_refdb_ensure_log(git_refdb *refdb, const char *refname);
int git_refdb_lock(void **payload, git_refdb *db, const char *refname);
int git_refdb_unlock(git_refdb *db, void *payload, int success, int update_reflog, const git_reference *ref, const git_signature *sig, const char *message);
#endif

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

View file

@ -0,0 +1,37 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_rand_h__
#define INCLUDE_rand_h__
#include "git2_util.h"
/**
* Initialize the random number generation subsystem. This will
* seed the random number generator with the system's entropy pool,
* if available, and will fall back to the current time and
* system information if not.
*/
int git_rand_global_init(void);
/**
* Seed the pseudo-random number generator. This is not needed to be
* called; the PRNG is seeded by `git_rand_global_init`, but it may
* be useful for testing. When the same seed is specified, the same
* sequence of random numbers from `git_rand_next` is emitted.
*
* @param seed the seed to use
*/
void git_rand_seed(uint64_t seed);
/**
* Get the next pseudo-random number in the sequence.
*
* @return a 64-bit pseudo-random number
*/
uint64_t git_rand_next(void);
#endif

View file

@ -0,0 +1,280 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_git_pathspec_h__
#define INCLUDE_git_pathspec_h__
#include "common.h"
#include "types.h"
#include "strarray.h"
#include "diff.h"
GIT_BEGIN_DECL
/**
* Compiled pathspec
*/
typedef struct git_pathspec git_pathspec;
/**
* List of filenames matching a pathspec
*/
typedef struct git_pathspec_match_list git_pathspec_match_list;
/**
* Options controlling how pathspec match should be executed
*/
typedef enum {
GIT_PATHSPEC_DEFAULT = 0,
/**
* GIT_PATHSPEC_IGNORE_CASE forces match to ignore case; otherwise
* match will use native case sensitivity of platform filesystem
*/
GIT_PATHSPEC_IGNORE_CASE = (1u << 0),
/**
* GIT_PATHSPEC_USE_CASE forces case sensitive match; otherwise
* match will use native case sensitivity of platform filesystem
*/
GIT_PATHSPEC_USE_CASE = (1u << 1),
/**
* GIT_PATHSPEC_NO_GLOB disables glob patterns and just uses simple
* string comparison for matching
*/
GIT_PATHSPEC_NO_GLOB = (1u << 2),
/**
* GIT_PATHSPEC_NO_MATCH_ERROR means the match functions return error
* code GIT_ENOTFOUND if no matches are found; otherwise no matches is
* still success (return 0) but `git_pathspec_match_list_entrycount`
* will indicate 0 matches.
*/
GIT_PATHSPEC_NO_MATCH_ERROR = (1u << 3),
/**
* GIT_PATHSPEC_FIND_FAILURES means that the `git_pathspec_match_list`
* should track which patterns matched which files so that at the end of
* the match we can identify patterns that did not match any files.
*/
GIT_PATHSPEC_FIND_FAILURES = (1u << 4),
/**
* GIT_PATHSPEC_FAILURES_ONLY means that the `git_pathspec_match_list`
* does not need to keep the actual matching filenames. Use this to
* just test if there were any matches at all or in combination with
* GIT_PATHSPEC_FIND_FAILURES to validate a pathspec.
*/
GIT_PATHSPEC_FAILURES_ONLY = (1u << 5)
} git_pathspec_flag_t;
/**
* Compile a pathspec
*
* @param out Output of the compiled pathspec
* @param pathspec A git_strarray of the paths to match
* @return 0 on success, <0 on failure
*/
GIT_EXTERN(int) git_pathspec_new(
git_pathspec **out, const git_strarray *pathspec);
/**
* Free a pathspec
*
* @param ps The compiled pathspec
*/
GIT_EXTERN(void) git_pathspec_free(git_pathspec *ps);
/**
* Try to match a path against a pathspec
*
* Unlike most of the other pathspec matching functions, this will not
* fall back on the native case-sensitivity for your platform. You must
* explicitly pass flags to control case sensitivity or else this will
* fall back on being case sensitive.
*
* @param ps The compiled pathspec
* @param flags Combination of git_pathspec_flag_t options to control match
* @param path The pathname to attempt to match
* @return 1 is path matches spec, 0 if it does not
*/
GIT_EXTERN(int) git_pathspec_matches_path(
const git_pathspec *ps, uint32_t flags, const char *path);
/**
* Match a pathspec against the working directory of a repository.
*
* This matches the pathspec against the current files in the working
* directory of the repository. It is an error to invoke this on a bare
* repo. This handles git ignores (i.e. ignored files will not be
* considered to match the `pathspec` unless the file is tracked in the
* index).
*
* If `out` is not NULL, this returns a `git_patchspec_match_list`. That
* contains the list of all matched filenames (unless you pass the
* `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
* pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
* flag). You must call `git_pathspec_match_list_free()` on this object.
*
* @param out Output list of matches; pass NULL to just get return value
* @param repo The repository in which to match; bare repo is an error
* @param flags Combination of git_pathspec_flag_t options to control match
* @param ps Pathspec to be matched
* @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
* the GIT_PATHSPEC_NO_MATCH_ERROR flag was given
*/
GIT_EXTERN(int) git_pathspec_match_workdir(
git_pathspec_match_list **out,
git_repository *repo,
uint32_t flags,
git_pathspec *ps);
/**
* Match a pathspec against entries in an index.
*
* This matches the pathspec against the files in the repository index.
*
* NOTE: At the moment, the case sensitivity of this match is controlled
* by the current case-sensitivity of the index object itself and the
* USE_CASE and IGNORE_CASE flags will have no effect. This behavior will
* be corrected in a future release.
*
* If `out` is not NULL, this returns a `git_patchspec_match_list`. That
* contains the list of all matched filenames (unless you pass the
* `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
* pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
* flag). You must call `git_pathspec_match_list_free()` on this object.
*
* @param out Output list of matches; pass NULL to just get return value
* @param index The index to match against
* @param flags Combination of git_pathspec_flag_t options to control match
* @param ps Pathspec to be matched
* @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
* the GIT_PATHSPEC_NO_MATCH_ERROR flag is used
*/
GIT_EXTERN(int) git_pathspec_match_index(
git_pathspec_match_list **out,
git_index *index,
uint32_t flags,
git_pathspec *ps);
/**
* Match a pathspec against files in a tree.
*
* This matches the pathspec against the files in the given tree.
*
* If `out` is not NULL, this returns a `git_patchspec_match_list`. That
* contains the list of all matched filenames (unless you pass the
* `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
* pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
* flag). You must call `git_pathspec_match_list_free()` on this object.
*
* @param out Output list of matches; pass NULL to just get return value
* @param tree The root-level tree to match against
* @param flags Combination of git_pathspec_flag_t options to control match
* @param ps Pathspec to be matched
* @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
* the GIT_PATHSPEC_NO_MATCH_ERROR flag is used
*/
GIT_EXTERN(int) git_pathspec_match_tree(
git_pathspec_match_list **out,
git_tree *tree,
uint32_t flags,
git_pathspec *ps);
/**
* Match a pathspec against files in a diff list.
*
* This matches the pathspec against the files in the given diff list.
*
* If `out` is not NULL, this returns a `git_patchspec_match_list`. That
* contains the list of all matched filenames (unless you pass the
* `GIT_PATHSPEC_FAILURES_ONLY` flag) and may also contain the list of
* pathspecs with no match (if you used the `GIT_PATHSPEC_FIND_FAILURES`
* flag). You must call `git_pathspec_match_list_free()` on this object.
*
* @param out Output list of matches; pass NULL to just get return value
* @param diff A generated diff list
* @param flags Combination of git_pathspec_flag_t options to control match
* @param ps Pathspec to be matched
* @return 0 on success, -1 on error, GIT_ENOTFOUND if no matches and
* the GIT_PATHSPEC_NO_MATCH_ERROR flag is used
*/
GIT_EXTERN(int) git_pathspec_match_diff(
git_pathspec_match_list **out,
git_diff *diff,
uint32_t flags,
git_pathspec *ps);
/**
* Free memory associates with a git_pathspec_match_list
*
* @param m The git_pathspec_match_list to be freed
*/
GIT_EXTERN(void) git_pathspec_match_list_free(git_pathspec_match_list *m);
/**
* Get the number of items in a match list.
*
* @param m The git_pathspec_match_list object
* @return Number of items in match list
*/
GIT_EXTERN(size_t) git_pathspec_match_list_entrycount(
const git_pathspec_match_list *m);
/**
* Get a matching filename by position.
*
* This routine cannot be used if the match list was generated by
* `git_pathspec_match_diff`. If so, it will always return NULL.
*
* @param m The git_pathspec_match_list object
* @param pos The index into the list
* @return The filename of the match
*/
GIT_EXTERN(const char *) git_pathspec_match_list_entry(
const git_pathspec_match_list *m, size_t pos);
/**
* Get a matching diff delta by position.
*
* This routine can only be used if the match list was generated by
* `git_pathspec_match_diff`. Otherwise it will always return NULL.
*
* @param m The git_pathspec_match_list object
* @param pos The index into the list
* @return The filename of the match
*/
GIT_EXTERN(const git_diff_delta *) git_pathspec_match_list_diff_entry(
const git_pathspec_match_list *m, size_t pos);
/**
* Get the number of pathspec items that did not match.
*
* This will be zero unless you passed GIT_PATHSPEC_FIND_FAILURES when
* generating the git_pathspec_match_list.
*
* @param m The git_pathspec_match_list object
* @return Number of items in original pathspec that had no matches
*/
GIT_EXTERN(size_t) git_pathspec_match_list_failed_entrycount(
const git_pathspec_match_list *m);
/**
* Get an original pathspec string that had no matches.
*
* This will be return NULL for positions out of range.
*
* @param m The git_pathspec_match_list object
* @param pos The index into the failed items
* @return The pathspec pattern that didn't match anything
*/
GIT_EXTERN(const char *) git_pathspec_match_list_failed_entry(
const git_pathspec_match_list *m, size_t pos);
GIT_END_DECL
#endif

View file

@ -0,0 +1,189 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "common.h"
#include "buf.h"
#include "futils.h"
#include "hash.h"
#include "odb.h"
#include "array.h"
#include "oidmap.h"
#include "pack-objects.h"
#include "git2/odb_backend.h"
#include "git2/object.h"
#include "git2/types.h"
#include "git2/pack.h"
#include "git2/sys/odb_backend.h"
#include "git2/sys/mempack.h"
struct memobject {
git_oid oid;
size_t len;
git_object_t type;
char data[GIT_FLEX_ARRAY];
};
struct memory_packer_db {
git_odb_backend parent;
git_oidmap *objects;
git_array_t(struct memobject *) commits;
};
static int impl__write(git_odb_backend *_backend, const git_oid *oid, const void *data, size_t len, git_object_t type)
{
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
struct memobject *obj = NULL;
size_t alloc_len;
if (git_oidmap_exists(db->objects, oid))
return 0;
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, sizeof(struct memobject), len);
obj = git__malloc(alloc_len);
GIT_ERROR_CHECK_ALLOC(obj);
memcpy(obj->data, data, len);
git_oid_cpy(&obj->oid, oid);
obj->len = len;
obj->type = type;
if (git_oidmap_set(db->objects, &obj->oid, obj) < 0)
return -1;
if (type == GIT_OBJECT_COMMIT) {
struct memobject **store = git_array_alloc(db->commits);
GIT_ERROR_CHECK_ALLOC(store);
*store = obj;
}
return 0;
}
static int impl__exists(git_odb_backend *backend, const git_oid *oid)
{
struct memory_packer_db *db = (struct memory_packer_db *)backend;
return git_oidmap_exists(db->objects, oid);
}
static int impl__read(void **buffer_p, size_t *len_p, git_object_t *type_p, git_odb_backend *backend, const git_oid *oid)
{
struct memory_packer_db *db = (struct memory_packer_db *)backend;
struct memobject *obj;
if ((obj = git_oidmap_get(db->objects, oid)) == NULL)
return GIT_ENOTFOUND;
*len_p = obj->len;
*type_p = obj->type;
*buffer_p = git__malloc(obj->len);
GIT_ERROR_CHECK_ALLOC(*buffer_p);
memcpy(*buffer_p, obj->data, obj->len);
return 0;
}
static int impl__read_header(size_t *len_p, git_object_t *type_p, git_odb_backend *backend, const git_oid *oid)
{
struct memory_packer_db *db = (struct memory_packer_db *)backend;
struct memobject *obj;
if ((obj = git_oidmap_get(db->objects, oid)) == NULL)
return GIT_ENOTFOUND;
*len_p = obj->len;
*type_p = obj->type;
return 0;
}
static int git_mempack__dump(
git_str *pack,
git_repository *repo,
git_odb_backend *_backend)
{
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
git_packbuilder *packbuilder;
uint32_t i;
int err = -1;
if (git_packbuilder_new(&packbuilder, repo) < 0)
return -1;
git_packbuilder_set_threads(packbuilder, 0);
for (i = 0; i < db->commits.size; ++i) {
struct memobject *commit = db->commits.ptr[i];
err = git_packbuilder_insert_commit(packbuilder, &commit->oid);
if (err < 0)
goto cleanup;
}
err = git_packbuilder__write_buf(pack, packbuilder);
cleanup:
git_packbuilder_free(packbuilder);
return err;
}
int git_mempack_dump(
git_buf *pack,
git_repository *repo,
git_odb_backend *_backend)
{
GIT_BUF_WRAP_PRIVATE(pack, git_mempack__dump, repo, _backend);
}
int git_mempack_reset(git_odb_backend *_backend)
{
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
struct memobject *object = NULL;
git_oidmap_foreach_value(db->objects, object, {
git__free(object);
});
git_array_clear(db->commits);
git_oidmap_clear(db->objects);
return 0;
}
static void impl__free(git_odb_backend *_backend)
{
struct memory_packer_db *db = (struct memory_packer_db *)_backend;
git_mempack_reset(_backend);
git_oidmap_free(db->objects);
git__free(db);
}
int git_mempack_new(git_odb_backend **out)
{
struct memory_packer_db *db;
GIT_ASSERT_ARG(out);
db = git__calloc(1, sizeof(struct memory_packer_db));
GIT_ERROR_CHECK_ALLOC(db);
if (git_oidmap_new(&db->objects) < 0)
return -1;
db->parent.version = GIT_ODB_BACKEND_VERSION;
db->parent.read = &impl__read;
db->parent.write = &impl__write;
db->parent.read_header = &impl__read_header;
db->parent.exists = &impl__exists;
db->parent.free = &impl__free;
*out = (git_odb_backend *)db;
return 0;
}

View file

@ -0,0 +1,256 @@
/*
* Copyright (c) 2017 Jun Zhao
* Copyright (c) 2017 Kaixuan Liu
*
* HW Acceleration API (video decoding) decode sample
*
* 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.
*/
/**
* @file
* HW-Accelerated decoding example.
*
* @example hw_decode.c
* This example shows how to do HW-accelerated decoding with output
* frames from the HW video surfaces.
*/
#include <stdio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavutil/pixdesc.h>
#include <libavutil/hwcontext.h>
#include <libavutil/opt.h>
#include <libavutil/avassert.h>
#include <libavutil/imgutils.h>
static AVBufferRef *hw_device_ctx = NULL;
static enum AVPixelFormat hw_pix_fmt;
static FILE *output_file = NULL;
static int hw_decoder_init(AVCodecContext *ctx, const enum AVHWDeviceType type)
{
int err = 0;
if ((err = av_hwdevice_ctx_create(&hw_device_ctx, type,
NULL, NULL, 0)) < 0) {
fprintf(stderr, "Failed to create specified HW device.\n");
return err;
}
ctx->hw_device_ctx = av_buffer_ref(hw_device_ctx);
return err;
}
static enum AVPixelFormat get_hw_format(AVCodecContext *ctx,
const enum AVPixelFormat *pix_fmts)
{
const enum AVPixelFormat *p;
for (p = pix_fmts; *p != -1; p++) {
if (*p == hw_pix_fmt)
return *p;
}
fprintf(stderr, "Failed to get HW surface format.\n");
return AV_PIX_FMT_NONE;
}
static int decode_write(AVCodecContext *avctx, AVPacket *packet)
{
AVFrame *frame = NULL, *sw_frame = NULL;
AVFrame *tmp_frame = NULL;
uint8_t *buffer = NULL;
int size;
int ret = 0;
ret = avcodec_send_packet(avctx, packet);
if (ret < 0) {
fprintf(stderr, "Error during decoding\n");
return ret;
}
while (1) {
if (!(frame = av_frame_alloc()) || !(sw_frame = av_frame_alloc())) {
fprintf(stderr, "Can not alloc frame\n");
ret = AVERROR(ENOMEM);
goto fail;
}
ret = avcodec_receive_frame(avctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
av_frame_free(&frame);
av_frame_free(&sw_frame);
return 0;
} else if (ret < 0) {
fprintf(stderr, "Error while decoding\n");
goto fail;
}
if (frame->format == hw_pix_fmt) {
/* retrieve data from GPU to CPU */
if ((ret = av_hwframe_transfer_data(sw_frame, frame, 0)) < 0) {
fprintf(stderr, "Error transferring the data to system memory\n");
goto fail;
}
tmp_frame = sw_frame;
} else
tmp_frame = frame;
size = av_image_get_buffer_size(tmp_frame->format, tmp_frame->width,
tmp_frame->height, 1);
buffer = av_malloc(size);
if (!buffer) {
fprintf(stderr, "Can not alloc buffer\n");
ret = AVERROR(ENOMEM);
goto fail;
}
ret = av_image_copy_to_buffer(buffer, size,
(const uint8_t * const *)tmp_frame->data,
(const int *)tmp_frame->linesize, tmp_frame->format,
tmp_frame->width, tmp_frame->height, 1);
if (ret < 0) {
fprintf(stderr, "Can not copy image to buffer\n");
goto fail;
}
if ((ret = fwrite(buffer, 1, size, output_file)) < 0) {
fprintf(stderr, "Failed to dump raw data.\n");
goto fail;
}
fail:
av_frame_free(&frame);
av_frame_free(&sw_frame);
av_freep(&buffer);
if (ret < 0)
return ret;
}
}
int main(int argc, char *argv[])
{
AVFormatContext *input_ctx = NULL;
int video_stream, ret;
AVStream *video = NULL;
AVCodecContext *decoder_ctx = NULL;
const AVCodec *decoder = NULL;
AVPacket *packet = NULL;
enum AVHWDeviceType type;
int i;
if (argc < 4) {
fprintf(stderr, "Usage: %s <device type> <input file> <output file>\n", argv[0]);
return -1;
}
type = av_hwdevice_find_type_by_name(argv[1]);
if (type == AV_HWDEVICE_TYPE_NONE) {
fprintf(stderr, "Device type %s is not supported.\n", argv[1]);
fprintf(stderr, "Available device types:");
while((type = av_hwdevice_iterate_types(type)) != AV_HWDEVICE_TYPE_NONE)
fprintf(stderr, " %s", av_hwdevice_get_type_name(type));
fprintf(stderr, "\n");
return -1;
}
packet = av_packet_alloc();
if (!packet) {
fprintf(stderr, "Failed to allocate AVPacket\n");
return -1;
}
/* open the input file */
if (avformat_open_input(&input_ctx, argv[2], NULL, NULL) != 0) {
fprintf(stderr, "Cannot open input file '%s'\n", argv[2]);
return -1;
}
if (avformat_find_stream_info(input_ctx, NULL) < 0) {
fprintf(stderr, "Cannot find input stream information.\n");
return -1;
}
/* find the video stream information */
ret = av_find_best_stream(input_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &decoder, 0);
if (ret < 0) {
fprintf(stderr, "Cannot find a video stream in the input file\n");
return -1;
}
video_stream = ret;
for (i = 0;; i++) {
const AVCodecHWConfig *config = avcodec_get_hw_config(decoder, i);
if (!config) {
fprintf(stderr, "Decoder %s does not support device type %s.\n",
decoder->name, av_hwdevice_get_type_name(type));
return -1;
}
if (config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX &&
config->device_type == type) {
hw_pix_fmt = config->pix_fmt;
break;
}
}
if (!(decoder_ctx = avcodec_alloc_context3(decoder)))
return AVERROR(ENOMEM);
video = input_ctx->streams[video_stream];
if (avcodec_parameters_to_context(decoder_ctx, video->codecpar) < 0)
return -1;
decoder_ctx->get_format = get_hw_format;
if (hw_decoder_init(decoder_ctx, type) < 0)
return -1;
if ((ret = avcodec_open2(decoder_ctx, decoder, NULL)) < 0) {
fprintf(stderr, "Failed to open codec for stream #%u\n", video_stream);
return -1;
}
/* open the file to dump raw data */
output_file = fopen(argv[3], "w+b");
/* actual decoding and dump the raw data */
while (ret >= 0) {
if ((ret = av_read_frame(input_ctx, packet)) < 0)
break;
if (video_stream == packet->stream_index)
ret = decode_write(decoder_ctx, packet);
av_packet_unref(packet);
}
/* flush the decoder */
ret = decode_write(decoder_ctx, NULL);
if (output_file)
fclose(output_file);
av_packet_free(&packet);
avcodec_free_context(&decoder_ctx);
avformat_close_input(&input_ctx);
av_buffer_unref(&hw_device_ctx);
return 0;
}

View file

@ -0,0 +1,16 @@
<theme>
<view name="system, gamelist">
<image name="band1">
<color>FA6E0D</color>
</image>
<image name="band2">
<color>FCCD0A</color>
</image>
<image name="band3">
<color>032EC0</color>
</image>
<image name="band4">
<color>459FD0</color>
</image>
</view>
</theme>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<svg id="svg2" version="1.1" enable-background="new 0 0 566.929 98.574" y="0px" x="0px" viewBox="0 0 264 46" xmlns="http://www.w3.org/2000/svg">
<g id="g4" fill="#fff" transform="matrix(0.465655, 0, 0, 0.46666, -0.001408, -0.000299)">
<polygon id="_43443024" points="542.31 0.917 566.93 0.917 532.22 54.913 526.59 97.041 504.34 97.041 510.86 48.973 488.61 0.917 512.64 0.917 524.51 28.215"/>
<polygon id="_43441624" points="283.03 59.066 312.39 59.066 315.36 37.706 286.29 37.706 288.37 22.276 322.18 22.276 325.45 0.917 269.38 0.917 256.03 97.041 311.8 97.041 314.77 75.671 280.95 75.671"/>
<path id="_43775888" d="m112.15 49.565 7.416-19.874 2.375 19.874h-9.79zm-8.01 18.987h20.172l3.563 28.48h36.488l16.91-52.213 8.309 52.213h19.283l21.359-55.179 3.561 55.179h21.359l-5.934-96.119h-25.514l-19.88 50.727-7.715-50.727h-22.842l-26.105 78.912-9.791-78.912h-28.48l-31.744 79.8 4.154-31.149h-38.571l-2.672 18.987h16.912l-1.188 6.526c-2.967 1.778-9.789 2.076-12.459 2.076s-22.545-1.779-21.656-23.14c0.882-21.358 29.362-41.234 63.181-30.258l3.266-20.47c-22.548-7.712-81.766-3.396-87.815 49.543-3.559 31.149 24.921 45.983 43.906 45.688 10.977 0.594 23.438-3.561 27.887-5.935l-1.482 4.451h22.547l10.977-28.48z"/>
<path id="_44102912" d="m464.58 0.028c-15.428-0.594-37.678 8.306-45.094 44.204-7.416 35.894 12.459 50.431 30.852 52.804 18.396 2.373 44.205-9.196 48.951-43.609 4.75-34.414-12.17-52.508-34.71-53.399zm-2.37 20.47c6.229 0 19.578 4.154 16.314 29.071-3.262 24.92-18.688 27.887-24.326 27.293-5.637-0.594-17.207-4.448-13.943-27.293 3.27-22.841 15.43-29.368 21.96-29.071z"/>
<path id="_44104296" d="m370.83 37.706h12.461c9.197 0 10.977-5.934 11.271-8.305 0.297-2.375-2.371-7.122-7.117-7.122h-14.537l-2.07 15.427zm-5.34 37.971h16.912c9.195 0 11.271-7.119 11.566-9.493 0.299-2.373-2.371-7.118-7.117-7.118h-18.986l-2.37 16.611zm-24.91 21.361 13.35-96.118h40.938c9.793 0 24.031 11.274 22.252 26.403-1.779 15.13-6.527 16.02-9.791 18.393 5.045 4.447 10.088 11.568 8.012 24.918-2.078 13.352-13.055 26.403-32.338 26.403l-42.42 0.001z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View file

@ -0,0 +1,17 @@
<theme>
<variables>
<systemName>PlayStation Vita</systemName>
<systemDescription>The PlayStation Vita (PS Vita, or Vita) is a handheld video game console developed and marketed by Sony Interactive Entertainment. It was first released in Japan on December 17, 2011, and in North America, Europe, and other international territories beginning on February 22, 2012. The console is the successor to the PlayStation Portable, and a part of the PlayStation brand of gaming devices; as part of the eighth generation of video game consoles, it primarily competed with the Nintendo 3DS.</systemDescription>
<systemManufacturer>Sony</systemManufacturer>
<systemReleaseYear>2011</systemReleaseYear>
<systemReleaseDate>2011-12-17</systemReleaseDate>
<systemReleaseDateFormated>December 17, 2011</systemReleaseDateFormated>
<systemHardwareType>Portable</systemHardwareType>
<systemCoverSize>3-4</systemCoverSize>
<systemColor>0966BC</systemColor>
<systemColorPalette1>03477C</systemColorPalette1>
<systemColorPalette2>6CAAD8</systemColorPalette2>
<systemColorPalette3>D0DFF2</systemColorPalette3>
<systemColorPalette4>2C2C2C</systemColorPalette4>
</variables>
</theme>

View file

@ -0,0 +1,685 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "blame_git.h"
#include "commit.h"
#include "blob.h"
#include "xdiff/xinclude.h"
#include "diff_xdiff.h"
/*
* Origin is refcounted and usually we keep the blob contents to be
* reused.
*/
static git_blame__origin *origin_incref(git_blame__origin *o)
{
if (o)
o->refcnt++;
return o;
}
static void origin_decref(git_blame__origin *o)
{
if (o && --o->refcnt <= 0) {
if (o->previous)
origin_decref(o->previous);
git_blob_free(o->blob);
git_commit_free(o->commit);
git__free(o);
}
}
/* Given a commit and a path in it, create a new origin structure. */
static int make_origin(git_blame__origin **out, git_commit *commit, const char *path)
{
git_blame__origin *o;
git_object *blob;
size_t path_len = strlen(path), alloc_len;
int error = 0;
if ((error = git_object_lookup_bypath(&blob, (git_object*)commit,
path, GIT_OBJECT_BLOB)) < 0)
return error;
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, sizeof(*o), path_len);
GIT_ERROR_CHECK_ALLOC_ADD(&alloc_len, alloc_len, 1);
o = git__calloc(1, alloc_len);
GIT_ERROR_CHECK_ALLOC(o);
o->commit = commit;
o->blob = (git_blob *) blob;
o->refcnt = 1;
strcpy(o->path, path);
*out = o;
return 0;
}
/* Locate an existing origin or create a new one. */
int git_blame__get_origin(
git_blame__origin **out,
git_blame *blame,
git_commit *commit,
const char *path)
{
git_blame__entry *e;
for (e = blame->ent; e; e = e->next) {
if (e->suspect->commit == commit && !strcmp(e->suspect->path, path)) {
*out = origin_incref(e->suspect);
}
}
return make_origin(out, commit, path);
}
typedef struct blame_chunk_cb_data {
git_blame *blame;
git_blame__origin *target;
git_blame__origin *parent;
long tlno;
long plno;
}blame_chunk_cb_data;
static bool same_suspect(git_blame__origin *a, git_blame__origin *b)
{
if (a == b)
return true;
if (git_oid_cmp(git_commit_id(a->commit), git_commit_id(b->commit)))
return false;
return 0 == strcmp(a->path, b->path);
}
/* find the line number of the last line the target is suspected for */
static bool find_last_in_target(size_t *out, git_blame *blame, git_blame__origin *target)
{
git_blame__entry *e;
size_t last_in_target = 0;
bool found = false;
*out = 0;
for (e=blame->ent; e; e=e->next) {
if (e->guilty || !same_suspect(e->suspect, target))
continue;
if (last_in_target < e->s_lno + e->num_lines) {
found = true;
last_in_target = e->s_lno + e->num_lines;
}
}
*out = last_in_target;
return found;
}
/*
* It is known that lines between tlno to same came from parent, and e
* has an overlap with that range. it also is known that parent's
* line plno corresponds to e's line tlno.
*
* <---- e ----->
* <------> (entirely within)
* <------------> (extends past)
* <------------> (starts before)
* <------------------> (entirely encloses)
*
* Split e into potentially three parts; before this chunk, the chunk
* to be blamed for the parent, and after that portion.
*/
static void split_overlap(git_blame__entry *split, git_blame__entry *e,
size_t tlno, size_t plno, size_t same, git_blame__origin *parent)
{
size_t chunk_end_lno;
if (e->s_lno < tlno) {
/* there is a pre-chunk part not blamed on the parent */
split[0].suspect = origin_incref(e->suspect);
split[0].lno = e->lno;
split[0].s_lno = e->s_lno;
split[0].num_lines = tlno - e->s_lno;
split[1].lno = e->lno + tlno - e->s_lno;
split[1].s_lno = plno;
} else {
split[1].lno = e->lno;
split[1].s_lno = plno + (e->s_lno - tlno);
}
if (same < e->s_lno + e->num_lines) {
/* there is a post-chunk part not blamed on parent */
split[2].suspect = origin_incref(e->suspect);
split[2].lno = e->lno + (same - e->s_lno);
split[2].s_lno = e->s_lno + (same - e->s_lno);
split[2].num_lines = e->s_lno + e->num_lines - same;
chunk_end_lno = split[2].lno;
} else {
chunk_end_lno = e->lno + e->num_lines;
}
split[1].num_lines = chunk_end_lno - split[1].lno;
/*
* if it turns out there is nothing to blame the parent for, forget about
* the splitting. !split[1].suspect signals this.
*/
if (split[1].num_lines < 1)
return;
split[1].suspect = origin_incref(parent);
}
/*
* Link in a new blame entry to the scoreboard. Entries that cover the same
* line range have been removed from the scoreboard previously.
*/
static void add_blame_entry(git_blame *blame, git_blame__entry *e)
{
git_blame__entry *ent, *prev = NULL;
origin_incref(e->suspect);
for (ent = blame->ent; ent && ent->lno < e->lno; ent = ent->next)
prev = ent;
/* prev, if not NULL, is the last one that is below e */
e->prev = prev;
if (prev) {
e->next = prev->next;
prev->next = e;
} else {
e->next = blame->ent;
blame->ent = e;
}
if (e->next)
e->next->prev = e;
}
/*
* src typically is on-stack; we want to copy the information in it to
* a malloced blame_entry that is already on the linked list of the scoreboard.
* The origin of dst loses a refcnt while the origin of src gains one.
*/
static void dup_entry(git_blame__entry *dst, git_blame__entry *src)
{
git_blame__entry *p, *n;
p = dst->prev;
n = dst->next;
origin_incref(src->suspect);
origin_decref(dst->suspect);
memcpy(dst, src, sizeof(*src));
dst->prev = p;
dst->next = n;
dst->score = 0;
}
/*
* split_overlap() divided an existing blame e into up to three parts in split.
* Adjust the linked list of blames in the scoreboard to reflect the split.
*/
static int split_blame(git_blame *blame, git_blame__entry *split, git_blame__entry *e)
{
git_blame__entry *new_entry;
if (split[0].suspect && split[2].suspect) {
/* The first part (reuse storage for the existing entry e */
dup_entry(e, &split[0]);
/* The last part -- me */
new_entry = git__malloc(sizeof(*new_entry));
GIT_ERROR_CHECK_ALLOC(new_entry);
memcpy(new_entry, &(split[2]), sizeof(git_blame__entry));
add_blame_entry(blame, new_entry);
/* ... and the middle part -- parent */
new_entry = git__malloc(sizeof(*new_entry));
GIT_ERROR_CHECK_ALLOC(new_entry);
memcpy(new_entry, &(split[1]), sizeof(git_blame__entry));
add_blame_entry(blame, new_entry);
} else if (!split[0].suspect && !split[2].suspect) {
/*
* The parent covers the entire area; reuse storage for e and replace it
* with the parent
*/
dup_entry(e, &split[1]);
} else if (split[0].suspect) {
/* me and then parent */
dup_entry(e, &split[0]);
new_entry = git__malloc(sizeof(*new_entry));
GIT_ERROR_CHECK_ALLOC(new_entry);
memcpy(new_entry, &(split[1]), sizeof(git_blame__entry));
add_blame_entry(blame, new_entry);
} else {
/* parent and then me */
dup_entry(e, &split[1]);
new_entry = git__malloc(sizeof(*new_entry));
GIT_ERROR_CHECK_ALLOC(new_entry);
memcpy(new_entry, &(split[2]), sizeof(git_blame__entry));
add_blame_entry(blame, new_entry);
}
return 0;
}
/*
* After splitting the blame, the origins used by the on-stack blame_entry
* should lose one refcnt each.
*/
static void decref_split(git_blame__entry *split)
{
int i;
for (i=0; i<3; i++)
origin_decref(split[i].suspect);
}
/*
* Helper for blame_chunk(). blame_entry e is known to overlap with the patch
* hunk; split it and pass blame to the parent.
*/
static int blame_overlap(
git_blame *blame,
git_blame__entry *e,
size_t tlno,
size_t plno,
size_t same,
git_blame__origin *parent)
{
git_blame__entry split[3] = {{0}};
split_overlap(split, e, tlno, plno, same, parent);
if (split[1].suspect)
if (split_blame(blame, split, e) < 0)
return -1;
decref_split(split);
return 0;
}
/*
* Process one hunk from the patch between the current suspect for blame_entry
* e and its parent. Find and split the overlap, and pass blame to the
* overlapping part to the parent.
*/
static int blame_chunk(
git_blame *blame,
size_t tlno,
size_t plno,
size_t same,
git_blame__origin *target,
git_blame__origin *parent)
{
git_blame__entry *e;
for (e = blame->ent; e; e = e->next) {
if (e->guilty || !same_suspect(e->suspect, target))
continue;
if (same <= e->s_lno)
continue;
if (tlno < e->s_lno + e->num_lines) {
if (blame_overlap(blame, e, tlno, plno, same, parent) < 0)
return -1;
}
}
return 0;
}
static int my_emit(
long start_a, long count_a,
long start_b, long count_b,
void *cb_data)
{
blame_chunk_cb_data *d = (blame_chunk_cb_data *)cb_data;
if (blame_chunk(d->blame, d->tlno, d->plno, start_b, d->target, d->parent) < 0)
return -1;
d->plno = start_a + count_a;
d->tlno = start_b + count_b;
return 0;
}
static void trim_common_tail(mmfile_t *a, mmfile_t *b, long ctx)
{
const int blk = 1024;
long trimmed = 0, recovered = 0;
char *ap = a->ptr + a->size;
char *bp = b->ptr + b->size;
long smaller = (long)((a->size < b->size) ? a->size : b->size);
if (ctx)
return;
while (blk + trimmed <= smaller && !memcmp(ap - blk, bp - blk, blk)) {
trimmed += blk;
ap -= blk;
bp -= blk;
}
while (recovered < trimmed)
if (ap[recovered++] == '\n')
break;
a->size -= trimmed - recovered;
b->size -= trimmed - recovered;
}
static int diff_hunks(mmfile_t file_a, mmfile_t file_b, void *cb_data, git_blame_options *options)
{
xdemitconf_t xecfg = {0};
xdemitcb_t ecb = {0};
xpparam_t xpp = {0};
if (options->flags & GIT_BLAME_IGNORE_WHITESPACE)
xpp.flags |= XDF_IGNORE_WHITESPACE;
xecfg.hunk_func = my_emit;
ecb.priv = cb_data;
trim_common_tail(&file_a, &file_b, 0);
if (file_a.size > GIT_XDIFF_MAX_SIZE ||
file_b.size > GIT_XDIFF_MAX_SIZE) {
git_error_set(GIT_ERROR_INVALID, "file too large to blame");
return -1;
}
return xdl_diff(&file_a, &file_b, &xpp, &xecfg, &ecb);
}
static void fill_origin_blob(git_blame__origin *o, mmfile_t *file)
{
memset(file, 0, sizeof(*file));
if (o->blob) {
file->ptr = (char*)git_blob_rawcontent(o->blob);
file->size = (long)git_blob_rawsize(o->blob);
}
}
static int pass_blame_to_parent(
git_blame *blame,
git_blame__origin *target,
git_blame__origin *parent)
{
size_t last_in_target;
mmfile_t file_p, file_o;
blame_chunk_cb_data d = { blame, target, parent, 0, 0 };
if (!find_last_in_target(&last_in_target, blame, target))
return 1; /* nothing remains for this target */
fill_origin_blob(parent, &file_p);
fill_origin_blob(target, &file_o);
if (diff_hunks(file_p, file_o, &d, &blame->options) < 0)
return -1;
/* The reset (i.e. anything after tlno) are the same as the parent */
if (blame_chunk(blame, d.tlno, d.plno, last_in_target, target, parent) < 0)
return -1;
return 0;
}
static int paths_on_dup(void **old, void *new)
{
GIT_UNUSED(old);
git__free(new);
return -1;
}
static git_blame__origin *find_origin(
git_blame *blame,
git_commit *parent,
git_blame__origin *origin)
{
git_blame__origin *porigin = NULL;
git_diff *difflist = NULL;
git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT;
git_tree *otree=NULL, *ptree=NULL;
/* Get the trees from this commit and its parent */
if (0 != git_commit_tree(&otree, origin->commit) ||
0 != git_commit_tree(&ptree, parent))
goto cleanup;
/* Configure the diff */
diffopts.context_lines = 0;
diffopts.flags = GIT_DIFF_SKIP_BINARY_CHECK;
/* Check to see if files we're interested have changed */
diffopts.pathspec.count = blame->paths.length;
diffopts.pathspec.strings = (char**)blame->paths.contents;
if (0 != git_diff_tree_to_tree(&difflist, blame->repository, ptree, otree, &diffopts))
goto cleanup;
if (!git_diff_num_deltas(difflist)) {
/* No changes; copy data */
git_blame__get_origin(&porigin, blame, parent, origin->path);
} else {
git_diff_find_options findopts = GIT_DIFF_FIND_OPTIONS_INIT;
int i;
/* Generate a full diff between the two trees */
git_diff_free(difflist);
diffopts.pathspec.count = 0;
if (0 != git_diff_tree_to_tree(&difflist, blame->repository, ptree, otree, &diffopts))
goto cleanup;
/* Let diff find renames */
findopts.flags = GIT_DIFF_FIND_RENAMES;
if (0 != git_diff_find_similar(difflist, &findopts))
goto cleanup;
/* Find one that matches */
for (i=0; i<(int)git_diff_num_deltas(difflist); i++) {
const git_diff_delta *delta = git_diff_get_delta(difflist, i);
if (!git_vector_bsearch(NULL, &blame->paths, delta->new_file.path))
{
git_vector_insert_sorted(&blame->paths, (void*)git__strdup(delta->old_file.path),
paths_on_dup);
make_origin(&porigin, parent, delta->old_file.path);
}
}
}
cleanup:
git_diff_free(difflist);
git_tree_free(otree);
git_tree_free(ptree);
return porigin;
}
/*
* The blobs of origin and porigin exactly match, so everything origin is
* suspected for can be blamed on the parent.
*/
static int pass_whole_blame(git_blame *blame,
git_blame__origin *origin, git_blame__origin *porigin)
{
git_blame__entry *e;
if (!porigin->blob &&
git_object_lookup((git_object**)&porigin->blob, blame->repository,
git_blob_id(origin->blob), GIT_OBJECT_BLOB) < 0)
return -1;
for (e=blame->ent; e; e=e->next) {
if (!same_suspect(e->suspect, origin))
continue;
origin_incref(porigin);
origin_decref(e->suspect);
e->suspect = porigin;
}
return 0;
}
static int pass_blame(git_blame *blame, git_blame__origin *origin, uint32_t opt)
{
git_commit *commit = origin->commit;
int i, num_parents;
git_blame__origin *sg_buf[16];
git_blame__origin *porigin, **sg_origin = sg_buf;
int ret, error = 0;
num_parents = git_commit_parentcount(commit);
if (!git_oid_cmp(git_commit_id(commit), &blame->options.oldest_commit))
/* Stop at oldest specified commit */
num_parents = 0;
else if (opt & GIT_BLAME_FIRST_PARENT && num_parents > 1)
/* Limit search to the first parent */
num_parents = 1;
if (!num_parents) {
git_oid_cpy(&blame->options.oldest_commit, git_commit_id(commit));
goto finish;
} else if (num_parents < (int)ARRAY_SIZE(sg_buf))
memset(sg_buf, 0, sizeof(sg_buf));
else {
sg_origin = git__calloc(num_parents, sizeof(*sg_origin));
GIT_ERROR_CHECK_ALLOC(sg_origin);
}
for (i=0; i<num_parents; i++) {
git_commit *p;
int j, same;
if (sg_origin[i])
continue;
if ((error = git_commit_parent(&p, origin->commit, i)) < 0)
goto finish;
porigin = find_origin(blame, p, origin);
if (!porigin) {
/*
* We only have to decrement the parent's
* reference count when no porigin has
* been created, as otherwise the commit
* is assigned to the created object.
*/
git_commit_free(p);
continue;
}
if (porigin->blob && origin->blob &&
!git_oid_cmp(git_blob_id(porigin->blob), git_blob_id(origin->blob))) {
error = pass_whole_blame(blame, origin, porigin);
origin_decref(porigin);
goto finish;
}
for (j = same = 0; j<i; j++)
if (sg_origin[j] &&
!git_oid_cmp(git_blob_id(sg_origin[j]->blob), git_blob_id(porigin->blob))) {
same = 1;
break;
}
if (!same)
sg_origin[i] = porigin;
else
origin_decref(porigin);
}
/* Standard blame */
for (i=0; i<num_parents; i++) {
git_blame__origin *porigin = sg_origin[i];
if (!porigin)
continue;
if (!origin->previous) {
origin_incref(porigin);
origin->previous = porigin;
}
if ((ret = pass_blame_to_parent(blame, origin, porigin)) != 0) {
if (ret < 0)
error = -1;
goto finish;
}
}
/* TODO: optionally find moves in parents' files */
/* TODO: optionally find copies in parents' files */
finish:
for (i=0; i<num_parents; i++)
if (sg_origin[i])
origin_decref(sg_origin[i]);
if (sg_origin != sg_buf)
git__free(sg_origin);
return error;
}
/*
* If two blame entries that are next to each other came from
* contiguous lines in the same origin (i.e. <commit, path> pair),
* merge them together.
*/
static void coalesce(git_blame *blame)
{
git_blame__entry *ent, *next;
for (ent=blame->ent; ent && (next = ent->next); ent = next) {
if (same_suspect(ent->suspect, next->suspect) &&
ent->guilty == next->guilty &&
ent->s_lno + ent->num_lines == next->s_lno)
{
ent->num_lines += next->num_lines;
ent->next = next->next;
if (ent->next)
ent->next->prev = ent;
origin_decref(next->suspect);
git__free(next);
ent->score = 0;
next = ent; /* again */
}
}
}
int git_blame__like_git(git_blame *blame, uint32_t opt)
{
int error = 0;
while (true) {
git_blame__entry *ent;
git_blame__origin *suspect = NULL;
/* Find a suspect to break down */
for (ent = blame->ent; !suspect && ent; ent = ent->next)
if (!ent->guilty)
suspect = ent->suspect;
if (!suspect)
break;
/* We'll use this suspect later in the loop, so hold on to it for now. */
origin_incref(suspect);
if ((error = pass_blame(blame, suspect, opt)) < 0)
break;
/* Take responsibility for the remaining entries */
for (ent = blame->ent; ent; ent = ent->next) {
if (same_suspect(ent->suspect, suspect)) {
ent->guilty = true;
ent->is_boundary = !git_oid_cmp(
git_commit_id(suspect->commit),
&blame->options.oldest_commit);
}
}
origin_decref(suspect);
}
if (!error)
coalesce(blame);
return error;
}
void git_blame__free_entry(git_blame__entry *ent)
{
if (!ent) return;
origin_decref(ent->suspect);
git__free(ent);
}

View file

@ -0,0 +1,767 @@
//========================================================================
//
// Form.h
//
// This file is licensed under the GPLv2 or later
//
// Copyright 2006 Julien Rebetez <julienr@svn.gnome.org>
// Copyright 2007, 2008, 2011 Carlos Garcia Campos <carlosgc@gnome.org>
// Copyright 2007-2010, 2012, 2015-2022 Albert Astals Cid <aacid@kde.org>
// Copyright 2010 Mark Riedesel <mark@klowner.com>
// Copyright 2011 Pino Toscano <pino@kde.org>
// Copyright 2012 Fabio D'Urso <fabiodurso@hotmail.it>
// Copyright 2013 Adrian Johnson <ajohnson@redneon.com>
// Copyright 2015 André Guerreiro <aguerreiro1985@gmail.com>
// Copyright 2015 André Esser <bepandre@hotmail.com>
// Copyright 2017 Roland Hieber <r.hieber@pengutronix.de>
// Copyright 2017 Hans-Ulrich Jüttner <huj@froreich-bioscientia.de>
// Copyright 2018 Andre Heinecke <aheinecke@intevation.de>
// Copyright 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by the LiMux project of the city of Munich
// Copyright 2018 Chinmoy Ranjan Pradhan <chinmoyrp65@protonmail.com>
// Copyright 2019, 2020 Oliver Sander <oliver.sander@tu-dresden.de>
// Copyright 2019 João Netto <joaonetto901@gmail.com>
// Copyright 2020, 2021 Nelson Benítez León <nbenitezl@gmail.com>
// Copyright 2020 Marek Kasik <mkasik@redhat.com>
// Copyright 2020 Thorsten Behrens <Thorsten.Behrens@CIB.de>
// Copyright 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by Technische Universität Dresden
// Copyright 2021 Georgiy Sgibnev <georgiy@sgibnev.com>. Work sponsored by lab50.net.
// Copyright 2021 Theofilos Intzoglou <int.teo@gmail.com>
// Copyright 2022 Alexander Sulfrian <asulfrian@zedat.fu-berlin.de>
//
//========================================================================
#ifndef FORM_H
#define FORM_H
#include "Annot.h"
#include "CharTypes.h"
#include "Object.h"
#include "poppler_private_export.h"
#include <ctime>
#include <optional>
#include <set>
#include <vector>
class GooString;
class Array;
class Dict;
class Annot;
class AnnotWidget;
class Annots;
class LinkAction;
class GfxResources;
class PDFDoc;
class SignatureInfo;
class X509CertificateInfo;
class SignatureHandler;
enum FormFieldType
{
formButton,
formText,
formChoice,
formSignature,
formUndef
};
enum FormButtonType
{
formButtonCheck,
formButtonPush,
formButtonRadio
};
enum FormSignatureType
{
adbe_pkcs7_sha1,
adbe_pkcs7_detached,
ETSI_CAdES_detached,
unknown_signature_type,
unsigned_signature_field
};
enum FillValueType
{
fillValue,
fillDefaultValue
};
class Form;
class FormField;
class FormFieldButton;
class FormFieldText;
class FormFieldSignature;
class FormFieldChoice;
//------------------------------------------------------------------------
// FormWidget
// A FormWidget represents the graphical part of a field and is "attached"
// to a page.
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormWidget
{
public:
virtual ~FormWidget();
// Check if point is inside the field bounding rect
bool inRect(double x, double y) const;
// Get the field bounding rect
void getRect(double *x1, double *y1, double *x2, double *y2) const;
unsigned getID() { return ID; }
void setID(unsigned int i) { ID = i; }
FormField *getField() { return field; }
FormFieldType getType() { return type; }
Object *getObj() { return &obj; }
Ref getRef() { return ref; }
void setChildNum(unsigned i) { childNum = i; }
unsigned getChildNum() { return childNum; }
const GooString *getPartialName() const;
void setPartialName(const GooString &name);
const GooString *getAlternateUiName() const;
const GooString *getMappingName() const;
GooString *getFullyQualifiedName();
bool isModified() const;
bool isReadOnly() const;
void setReadOnly(bool value);
LinkAction *getActivationAction(); // The caller should not delete the result
std::unique_ptr<LinkAction> getAdditionalAction(Annot::FormAdditionalActionsType type);
bool setAdditionalAction(Annot::FormAdditionalActionsType t, const GooString &js);
// return the unique ID corresponding to pageNum/fieldNum
static int encodeID(unsigned pageNum, unsigned fieldNum);
// decode id and retrieve pageNum and fieldNum
static void decodeID(unsigned id, unsigned *pageNum, unsigned *fieldNum);
void createWidgetAnnotation();
AnnotWidget *getWidgetAnnotation() const { return widget; }
void setWidgetAnnotation(AnnotWidget *_widget) { widget = _widget; }
virtual void updateWidgetAppearance() = 0;
void print(int indent = 0);
protected:
FormWidget(PDFDoc *docA, Object *aobj, unsigned num, Ref aref, FormField *fieldA);
AnnotWidget *widget;
FormField *field;
FormFieldType type;
Object obj;
Ref ref;
PDFDoc *doc;
XRef *xref;
// index of this field in the parent's child list
unsigned childNum;
/*
Field ID is an (unsigned) integer, calculated as follow :
the first sizeof/2 bits are the field number, relative to the page
the last sizeof/2 bits are the page number
[page number | field number]
(encoding) id = (pageNum << 4*sizeof(unsigned)) + fieldNum;
(decoding) pageNum = id >> 4*sizeof(unsigned); fieldNum = (id << 4*sizeof(unsigned)) >> 4*sizeof(unsigned);
*/
unsigned ID;
};
//------------------------------------------------------------------------
// FormWidgetButton
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormWidgetButton : public FormWidget
{
public:
FormWidgetButton(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
~FormWidgetButton() override;
FormButtonType getButtonType() const;
void setState(bool state);
bool getState() const;
const char *getOnStr() const;
void setAppearanceState(const char *state);
void updateWidgetAppearance() override;
protected:
FormFieldButton *parent() const;
GooString *onStr;
};
//------------------------------------------------------------------------
// FormWidgetText
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormWidgetText : public FormWidget
{
public:
FormWidgetText(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
// return the field's content (UTF16BE)
const GooString *getContent() const;
// expects a UTF16BE string
void setContent(const GooString *new_content);
// sets the text inside the field appearance stream
void setAppearanceContent(const GooString *new_content);
void updateWidgetAppearance() override;
bool isMultiline() const;
bool isPassword() const;
bool isFileSelect() const;
bool noSpellCheck() const;
bool noScroll() const;
bool isComb() const;
bool isRichText() const;
int getMaxLen() const;
// return the font size of the field's text
double getTextFontSize();
// set the font size of the field's text (currently only integer values)
void setTextFontSize(int fontSize);
protected:
FormFieldText *parent() const;
};
//------------------------------------------------------------------------
// FormWidgetChoice
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormWidgetChoice : public FormWidget
{
public:
FormWidgetChoice(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
~FormWidgetChoice() override;
int getNumChoices() const;
// return the display name of the i-th choice (UTF16BE)
const GooString *getChoice(int i) const;
const GooString *getExportVal(int i) const;
// select the i-th choice
void select(int i);
// toggle selection of the i-th choice
void toggle(int i);
// deselect everything
void deselectAll();
// except a UTF16BE string
// only work for editable combo box, set the user-entered text as the current choice
void setEditChoice(const GooString *new_content);
const GooString *getEditChoice() const;
void updateWidgetAppearance() override;
bool isSelected(int i) const;
bool isCombo() const;
bool hasEdit() const;
bool isMultiSelect() const;
bool noSpellCheck() const;
bool commitOnSelChange() const;
bool isListBox() const;
protected:
bool _checkRange(int i) const;
FormFieldChoice *parent() const;
};
//------------------------------------------------------------------------
// FormWidgetSignature
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormWidgetSignature : public FormWidget
{
public:
FormWidgetSignature(PDFDoc *docA, Object *dictObj, unsigned num, Ref ref, FormField *p);
void updateWidgetAppearance() override;
FormSignatureType signatureType() const;
void setSignatureType(FormSignatureType fst);
// Use -1 for now as validationTime
SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime, bool ocspRevocationCheck, bool enableAIA);
// returns a list with the boundaries of the signed ranges
// the elements of the list are of type Goffset
std::vector<Goffset> getSignedRangeBounds() const;
// Creates or replaces the dictionary name "V" in the signature dictionary and
// fills it with the fields of the signature; the field "Contents" is the signature
// in PKCS#7 format, which is calculated over the byte range encompassing the whole
// document except for the signature itself; this byte range is specified in the
// field "ByteRange" in the dictionary "V".
// Arguments reason and location are UTF-16 big endian strings with BOM. An empty string and nullptr are acceptable too.
// Returns success.
bool signDocument(const char *filename, const char *certNickname, const char *digestName, const char *password, const GooString *reason = nullptr, const GooString *location = nullptr, const std::optional<GooString> &ownerPassword = {},
const std::optional<GooString> &userPassword = {});
// Same as above but adds text, font color, etc.
bool signDocumentWithAppearance(const char *filename, const char *certNickname, const char *digestName, const char *password, const GooString *reason = nullptr, const GooString *location = nullptr,
const std::optional<GooString> &ownerPassword = {}, const std::optional<GooString> &userPassword = {}, const GooString &signatureText = {}, const GooString &signatureTextLeft = {}, double fontSize = {},
double leftFontSize = {}, std::unique_ptr<AnnotColor> &&fontColor = {}, double borderWidth = {}, std::unique_ptr<AnnotColor> &&borderColor = {}, std::unique_ptr<AnnotColor> &&backgroundColor = {});
// checks the length encoding of the signature and returns the hex encoded signature
// if the check passed (and the checked file size as output parameter in checkedFileSize)
// otherwise a nullptr is returned
std::optional<GooString> getCheckedSignature(Goffset *checkedFileSize);
const GooString *getSignature() const;
private:
bool createSignature(Object &vObj, Ref vRef, const GooString &name, const GooString *signature, const GooString *reason = nullptr, const GooString *location = nullptr);
bool getObjectStartEnd(const GooString &filename, int objNum, Goffset *objStart, Goffset *objEnd, const std::optional<GooString> &ownerPassword, const std::optional<GooString> &userPassword);
bool updateOffsets(FILE *f, Goffset objStart, Goffset objEnd, Goffset *sigStart, Goffset *sigEnd, Goffset *fileSize);
bool updateSignature(FILE *f, Goffset sigStart, Goffset sigEnd, const GooString *signature);
};
//------------------------------------------------------------------------
// FormField
// A FormField implements the logical side of a field and is "attached" to
// the Catalog. This is an internal class and client applications should
// only interact with FormWidgets.
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormField
{
public:
FormField(PDFDoc *docA, Object &&aobj, const Ref aref, FormField *parent, std::set<int> *usedParents, FormFieldType t = formUndef);
virtual ~FormField();
// Accessors.
FormFieldType getType() const { return type; }
Object *getObj() { return &obj; }
Ref getRef() { return ref; }
void setReadOnly(bool value);
bool isReadOnly() const { return readOnly; }
void setStandAlone(bool value) { standAlone = value; }
bool isStandAlone() const { return standAlone; }
GooString *getDefaultAppearance() const { return defaultAppearance; }
void setDefaultAppearance(const std::string &appearance);
bool hasTextQuadding() const { return hasQuadding; }
VariableTextQuadding getTextQuadding() const { return quadding; }
const GooString *getPartialName() const { return partialName; }
void setPartialName(const GooString &name);
const GooString *getAlternateUiName() const { return alternateUiName; }
const GooString *getMappingName() const { return mappingName; }
GooString *getFullyQualifiedName();
FormWidget *findWidgetByRef(Ref aref);
int getNumWidgets() const { return terminal ? numChildren : 0; }
FormWidget *getWidget(int i) const { return terminal ? widgets[i] : nullptr; }
int getNumChildren() const { return !terminal ? numChildren : 0; }
FormField *getChildren(int i) const { return children[i]; }
// only implemented in FormFieldButton
virtual void fillChildrenSiblingsID();
void createWidgetAnnotations();
void printTree(int indent = 0);
virtual void print(int indent = 0);
virtual void reset(const std::vector<std::string> &excludedFields);
void resetChildren(const std::vector<std::string> &excludedFields);
FormField *findFieldByRef(Ref aref);
FormField *findFieldByFullyQualifiedName(const std::string &name);
protected:
void _createWidget(Object *obj, Ref aref);
void createChildren(std::set<int> *usedParents);
void updateChildrenAppearance();
bool isAmongExcludedFields(const std::vector<std::string> &excludedFields);
FormFieldType type; // field type
Ref ref;
bool terminal;
Object obj;
PDFDoc *doc;
XRef *xref;
FormField **children;
FormField *parent;
int numChildren;
FormWidget **widgets;
bool readOnly;
GooString *partialName; // T field
GooString *alternateUiName; // TU field
GooString *mappingName; // TM field
GooString *fullyQualifiedName;
// Variable Text
GooString *defaultAppearance;
bool hasQuadding;
VariableTextQuadding quadding;
// True when FormField is not part of Catalog's Field array (or there isn't one).
bool standAlone;
private:
FormField() { }
};
//------------------------------------------------------------------------
// FormFieldButton
//------------------------------------------------------------------------
class FormFieldButton : public FormField
{
public:
FormFieldButton(PDFDoc *docA, Object &&dict, const Ref ref, FormField *parent, std::set<int> *usedParents);
FormButtonType getButtonType() const { return btype; }
bool noToggleToOff() const { return noAllOff; }
// returns true if the state modification is accepted
bool setState(const char *state, bool ignoreToggleOff = false);
bool getState(const char *state) const;
const char *getAppearanceState() const { return appearanceState.isName() ? appearanceState.getName() : nullptr; }
const char *getDefaultAppearanceState() const { return defaultAppearanceState.isName() ? defaultAppearanceState.getName() : nullptr; }
void fillChildrenSiblingsID() override;
void setNumSiblings(int num);
void setSibling(int i, FormFieldButton *id) { siblings[i] = id; }
// For radio buttons, return the fields of the other radio buttons in the same group
FormFieldButton *getSibling(int i) const { return siblings[i]; }
int getNumSiblings() const { return numSiblings; }
void print(int indent) override;
void reset(const std::vector<std::string> &excludedFields) override;
~FormFieldButton() override;
protected:
void updateState(const char *state);
FormFieldButton **siblings; // IDs of dependent buttons (each button of a radio field has all the others buttons
// of the same field in this array)
int numSiblings;
FormButtonType btype;
int size;
int active_child; // only used for combo box
bool noAllOff;
Object appearanceState; // V
Object defaultAppearanceState; // DV
};
//------------------------------------------------------------------------
// FormFieldText
//------------------------------------------------------------------------
class FormFieldText : public FormField
{
public:
FormFieldText(PDFDoc *docA, Object &&dictObj, const Ref ref, FormField *parent, std::set<int> *usedParents);
const GooString *getContent() const { return content; }
const GooString *getAppearanceContent() const { return internalContent ? internalContent : content; }
void setContentCopy(const GooString *new_content);
void setAppearanceContentCopy(const GooString *new_content);
~FormFieldText() override;
bool isMultiline() const { return multiline; }
bool isPassword() const { return password; }
bool isFileSelect() const { return fileSelect; }
bool noSpellCheck() const { return doNotSpellCheck; }
bool noScroll() const { return doNotScroll; }
bool isComb() const { return comb; }
bool isRichText() const { return richText; }
int getMaxLen() const { return maxLen; }
// return the font size of the field's text
double getTextFontSize();
// set the font size of the field's text (currently only integer values)
void setTextFontSize(int fontSize);
void print(int indent) override;
void reset(const std::vector<std::string> &excludedFields) override;
static int tokenizeDA(const std::string &daString, std::vector<std::string> *daToks, const char *searchTok);
protected:
int parseDA(std::vector<std::string> *daToks);
void fillContent(FillValueType fillType);
GooString *content;
GooString *internalContent;
GooString *defaultContent;
bool multiline;
bool password;
bool fileSelect;
bool doNotSpellCheck;
bool doNotScroll;
bool comb;
bool richText;
int maxLen;
};
//------------------------------------------------------------------------
// FormFieldChoice
//------------------------------------------------------------------------
class FormFieldChoice : public FormField
{
public:
FormFieldChoice(PDFDoc *docA, Object &&aobj, const Ref ref, FormField *parent, std::set<int> *usedParents);
~FormFieldChoice() override;
int getNumChoices() const { return numChoices; }
const GooString *getChoice(int i) const { return choices ? choices[i].optionName : nullptr; }
const GooString *getExportVal(int i) const { return choices ? choices[i].exportVal : nullptr; }
// For multi-select choices it returns the first one
const GooString *getSelectedChoice() const;
// select the i-th choice
void select(int i);
// toggle selection of the i-th choice
void toggle(int i);
// deselect everything
void deselectAll();
// only work for editable combo box, set the user-entered text as the current choice
void setEditChoice(const GooString *new_content);
const GooString *getEditChoice() const;
bool isSelected(int i) const { return choices[i].selected; }
int getNumSelected();
bool isCombo() const { return combo; }
bool hasEdit() const { return edit; }
bool isMultiSelect() const { return multiselect; }
bool noSpellCheck() const { return doNotSpellCheck; }
bool commitOnSelChange() const { return doCommitOnSelChange; }
bool isListBox() const { return !combo; }
int getTopIndex() const { return topIdx; }
void print(int indent) override;
void reset(const std::vector<std::string> &excludedFields) override;
protected:
void unselectAll();
void updateSelection();
void fillChoices(FillValueType fillType);
bool combo;
bool edit;
bool multiselect;
bool doNotSpellCheck;
bool doCommitOnSelChange;
struct ChoiceOpt
{
GooString *exportVal; // the export value ("internal" name)
GooString *optionName; // displayed name
bool selected; // if this choice is selected
};
int numChoices;
ChoiceOpt *choices;
bool *defaultChoices;
GooString *editedChoice;
int topIdx; // TI
};
//------------------------------------------------------------------------
// FormFieldSignature
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormFieldSignature : public FormField
{
public:
FormFieldSignature(PDFDoc *docA, Object &&dict, const Ref ref, FormField *parent, std::set<int> *usedParents);
// Use -1 for now as validationTime
SignatureInfo *validateSignature(bool doVerifyCert, bool forceRevalidation, time_t validationTime, bool ocspRevocationCheck, bool enableAIA);
// returns a list with the boundaries of the signed ranges
// the elements of the list are of type Goffset
std::vector<Goffset> getSignedRangeBounds() const;
// checks the length encoding of the signature and returns the hex encoded signature
// if the check passed (and the checked file size as output parameter in checkedFileSize)
// otherwise a nullptr is returned
std::optional<GooString> getCheckedSignature(Goffset *checkedFileSize);
~FormFieldSignature() override;
Object *getByteRange() { return &byte_range; }
const GooString *getSignature() const { return signature; }
void setSignature(const GooString &sig);
FormSignatureType getSignatureType() const { return signature_type; }
void setSignatureType(FormSignatureType t) { signature_type = t; }
const GooString &getCustomAppearanceContent() const;
void setCustomAppearanceContent(const GooString &s);
const GooString &getCustomAppearanceLeftContent() const;
void setCustomAppearanceLeftContent(const GooString &s);
double getCustomAppearanceLeftFontSize() const;
void setCustomAppearanceLeftFontSize(double size);
// Background image (ref to an object of type XObject). Invalid ref if not required.
Ref getImageResource() const;
void setImageResource(const Ref imageResourceA);
void setCertificateInfo(std::unique_ptr<X509CertificateInfo> &);
FormWidget *getCreateWidget();
private:
void parseInfo();
void hashSignedDataBlock(SignatureHandler *handler, Goffset block_len);
FormSignatureType signature_type;
Object byte_range;
GooString *signature;
SignatureInfo *signature_info;
GooString customAppearanceContent;
GooString customAppearanceLeftContent;
double customAppearanceLeftFontSize = 20;
Ref imageResource = Ref::INVALID();
std::unique_ptr<X509CertificateInfo> certificate_info;
void print(int indent) override;
};
//------------------------------------------------------------------------
// Form
// This class handle the document-wide part of Form (things in the acroForm
// Catalog entry).
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT Form
{
public:
explicit Form(PDFDoc *doc);
~Form();
Form(const Form &) = delete;
Form &operator=(const Form &) = delete;
// Look up an inheritable field dictionary entry.
static Object fieldLookup(Dict *field, const char *key);
/* Creates a new Field of the type specified in obj's dict.
used in Form::Form , FormField::FormField and
Page::loadStandaloneFields */
static FormField *createFieldFromDict(Object &&obj, PDFDoc *docA, const Ref aref, FormField *parent, std::set<int> *usedParents);
// Finds in the default resources dictionary a font named popplerfontXXX that
// has the given fontFamily and fontStyle. This makes us relatively sure that we added that font ourselves
std::string findFontInDefaultResources(const std::string &fontFamily, const std::string &fontStyle) const;
struct AddFontResult
{
std::string fontName;
Ref ref;
};
// Finds in the system a font name matching the given fontFamily and fontStyle
// And adds it to the default resources dictionary, font name there will be popplerfontXXX
AddFontResult addFontToDefaultResources(const std::string &fontFamily, const std::string &fontStyle);
// Finds in the default resources dictionary a font named popplerfontXXX that
// emulates fontToEmulate and can draw the given char
std::string getFallbackFontForChar(Unicode uChar, const GfxFont &fontToEmulate) const;
// Makes sure the default resources has fonts to draw all the given chars and as close as possible to the given pdfFontNameToEmulate
// If needed adds fonts to the default resources dictionary, font names will be popplerfontXXX
// If fieldResources is not nullptr, it is used instead of the to query the font to emulate instead of the default resources
// Returns a list of all the added fonts (if any)
std::vector<AddFontResult> ensureFontsForAllCharacters(const GooString *unicodeText, const std::string &pdfFontNameToEmulate, GfxResources *fieldResources = nullptr);
bool getNeedAppearances() const { return needAppearances; }
int getNumFields() const { return numFields; }
FormField *getRootField(int i) const { return rootFields[i]; }
const GooString *getDefaultAppearance() const { return defaultAppearance; }
VariableTextQuadding getTextQuadding() const { return quadding; }
GfxResources *getDefaultResources() const { return defaultResources; }
Object *getDefaultResourcesObj() { return &resDict; }
FormWidget *findWidgetByRef(Ref aref);
FormField *findFieldByRef(Ref aref) const;
FormField *findFieldByFullyQualifiedName(const std::string &name) const;
void postWidgetsLoad();
const std::vector<Ref> &getCalculateOrder() const { return calculateOrder; }
void reset(const std::vector<std::string> &fields, bool excludeFields);
private:
// Finds in the system a font name matching the given fontFamily and fontStyle
// And adds it to the default resources dictionary, font name there will be popplerfontXXX
AddFontResult addFontToDefaultResources(const std::string &filepath, int faceIndex, const std::string &fontFamily, const std::string &fontStyle);
AddFontResult doGetAddFontToDefaultResources(Unicode uChar, const GfxFont &fontToEmulate);
FormField **rootFields;
int numFields;
int size;
PDFDoc *const doc;
bool needAppearances;
GfxResources *defaultResources;
Object resDict;
std::vector<Ref> calculateOrder;
// Variable Text
GooString *defaultAppearance;
VariableTextQuadding quadding;
};
//------------------------------------------------------------------------
// FormPageWidgets
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT FormPageWidgets
{
public:
FormPageWidgets(Annots *annots, unsigned int page, Form *form);
~FormPageWidgets();
FormPageWidgets(const FormPageWidgets &) = delete;
FormPageWidgets &operator=(const FormPageWidgets &) = delete;
int getNumWidgets() const { return numWidgets; }
FormWidget *getWidget(int i) const { return widgets[i]; }
void addWidgets(const std::vector<FormField *> &addedWidgets, unsigned int page);
private:
FormWidget **widgets;
int numWidgets;
int size;
};
#endif

View file

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" baseProfile="tiny"
id="svg2" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="-258.2 372 180.2 50"
xml:space="preserve">
<rect x="-501" y="744" fill="none" width="82.3" height="50"/>
<g id="g14">
<g id="g20" transform="translate(7.5553,16.9088)">
<path id="path22" d="M-207.4,384c-0.1,0-0.1,0-0.2,0c-5.4-2.6-8.2-5.7-8.1-8.9c0.1-2.6,2.2-5.1,6.2-7.2c3.7-2,9-3.5,15.3-4.5
c0.2,0,0.4,0.1,0.4,0.3c0,0.2-0.1,0.4-0.3,0.4c-12.6,2-20.6,6.2-20.8,10.9c-0.1,2.8,2.6,5.7,7.7,8.2c0.2,0.1,0.3,0.3,0.2,0.5
C-207.1,383.9-207.3,384-207.4,384"/>
</g>
<g id="g24" transform="translate(45.4753,32.5426)">
<path id="path26" d="M-197.9,348.8C-197.9,348.8-198,348.8-197.9,348.8c-4.1-0.7-8.3-1.1-12.7-1.3c-0.2,0-0.4-0.2-0.4-0.4
c0-0.2,0.2-0.4,0.4-0.4c4.4,0.2,8.6,0.7,12.7,1.3c0.2,0,0.3,0.2,0.3,0.4C-197.6,348.6-197.7,348.8-197.9,348.8"/>
</g>
<g id="g28" transform="translate(35.8737,11.9645)">
<path id="path30" d="M-200.3,395.1h-0.3h-0.4h0.4c0.1,0,0.2-0.2,0.3-0.2c20.4,0,36.5-5.4,36.7-12.2c0.1-2.4-1.8-4.9-5.5-7.1
s-9-4.1-15.3-5.4c-0.2,0-0.3-0.3-0.3-0.5s0.2-0.3,0.5-0.3c6.4,1.4,11.7,3.2,15.5,5.5c4,2.3,6,5,5.9,7.7c-0.1,3.6-4.1,6.8-11.3,9.1
C-181,394-190.3,395.1-200.3,395.1"/>
</g>
<g id="g32" transform="translate(41.3971,27.5914)">
<path id="path34" d="M-198.9,359.9l10.1-7.7l-11.8,4.7l-3.3-3.5l1.1,4.8l-10.1,7.7l11.8-4.7l3.3,3.5L-198.9,359.9z"/>
</g>
<g id="g36" transform="translate(22.4792,30.7779)">
<path id="path38" d="M-203.7,352.7l0.8-4.3l3-0.5c0.4-0.1,0.6,0.2,0.5,0.6l-0.5,2.9c-0.1,0.4-0.4,0.7-0.8,0.8L-203.7,352.7z
M-170,364.9l0.8-4.3c0.3-1.4,1.7-2.7,3-2.9l5.4-0.9c0.9-0.1,1.6,0.9,1.4,1.9l-0.3,1.4c-0.2,1-1.2,2.1-2.1,2.2l-5.7,0.9l-0.1,0.5
c-0.1,0.6,0.3,1,0.8,0.9l6.3-1l-0.4,2.3l-7.1,1.1C-169.2,367.3-170.2,366.3-170,364.9 M-184.1,360.5l2.3-0.4l-1.7,9.4l-2.3,0.4
L-184.1,360.5C-184.2,360.5-184.1,360.5-184.1,360.5z M-199.2,372l-2.3,0.4l1.1-6.1c0.1-0.8-0.1-1-0.8-0.9l-4.1,0.6l-1.3,7.2
l-2.3,0.4l1.7-9.4h0.1l7.7-1.2c1.2-0.2,1.8,0.5,1.6,1.8C-197.9,364.7-199.2,372-199.2,372z M-210.4,371.4l-0.5,2.5l-9.7,1.5
l3-16.3l8-1.3l-0.4,2.2l-5.7,0.9l-0.9,4.7l4.7-0.7l-0.4,2.2l-4.7,0.7l-0.9,4.7L-210.4,371.4z M-210.1,369.6l-5.5,0.9l0.2-1.1
l4.4-0.7l1.1-5.8l-4.4,0.7l0.2-1.1l5.5-0.9C-208.6,361.6-210.1,369.6-210.1,369.6z M-197.9,373.6v-0.2c0.2,0,0.4,0.1,0.5,0
l4.6-0.7c-0.2,0.9-1.4,1.1-3.2,1.4l-2.1,0.3l-1.1,6l2.8-0.4c6.8-0.7,9.4-4.2,10.2-8.3l8.3-1.3l1.3-7.2l0.7-0.1
c0.7-0.1,0.6-0.2,0.5,0.5l-1.2,6.6l5.9-0.9l0.1-0.4c0.4,0.2,1,0.3,1.5,0.2l10.3-1.6l1-5.1l-0.7-0.5c0.6-0.7,1-1.5,1.2-2.2l0.2-0.8
c0.5-3-2.3-3.8-3.6-3.6l-5.9,0.9c-1,0.2-2.2,0.9-3,1.9c-0.8-0.8-2-1.1-2.7-1l-6.6,1l0.7,1.6l5.9-0.9c0.9-0.1,1.4,0.2,1.6,0.9
c-0.1,0.2-1.6,8.2-1.6,8.2l-2.1,0.3l1.1-6.1c0.1-0.8-0.1-1-0.8-0.9l-4.1,0.6l-1.3,7.2l-2.3,0.4l1.5-8.2l-1.9-2.3l-6.9,2.5l3.3-0.5
h0.1l-2.1,11.2c-0.5,2.8-3.6,5.6-6.3,6l-2.8,0.4l0.4-2.2l2.1-0.3c1.8-0.3,3.9-2.1,4.3-4.1l0.2-1.2l-5.5,0.9
c-1.2,0.2-1.8-0.5-1.6-1.8l1-5.3c0.2-0.9,0.8-1.7,1.5-2.1v-0.1l2.7-2.1l-1.6,0.3c-0.9,0.1-2.4,0.8-3.4,2c-0.8-0.9-2.1-1.3-2.8-1.1
l-5.9,0.9l1-5.1l4.3-0.7c2.3-0.4,4.8-2.9,5.3-5.3l0.6-3.5c0.4-2.4-1.2-4.3-3.5-3.9l-9.4,1.5l-2,10.7l-8.6,1.4
c-0.7,0.1-1.4,0.8-1.6,1.6l-3.2,17.3c-0.1,0.8,0.3,1.3,1.1,1.2l16.5-2.6l1.3-7.2l0.7-0.1c0.7-0.1,0.6-0.2,0.5,0.5l-1.2,6.6
C-203.8,374.5-197.9,373.6-197.9,373.6z M-167,360.9v0.3l4.4-0.7c0.3-0.1,0.7-0.4,0.8-0.8s-0.2-0.6-0.5-0.6l-1.1,0.2l-1.8,0.3
l-0.5,0.1C-166.3,359.7-166.9,360.3-167,360.9 M-194.1,365.3l-0.5,2.8c-0.1,0.8,0.1,1,0.8,0.9l4.3-0.7l0.9-4.9l-4.3,0.7
C-193.6,364.2-193.9,364.5-194.1,365.3 M-192.6,366.3c0.1-0.7,0.4-0.6,1.1-0.7l0.7-0.1l-0.2,1.1l-0.7,0.1
C-192.4,366.8-192.7,367-192.6,366.3"/>
</g>
<g id="g40" transform="translate(37.6393,29.1861)">
<path id="path42" d="M-199.9,356.3l-0.6-2.5h-0.4l-0.1,0.6c-0.1,0.4-0.4,0.8-0.8,0.8l-2.4,0.4c-0.4,0.1-0.6-0.2-0.6-0.6l1.2-6.6
c0.1-0.4,0.4-0.8,0.8-0.8l2.4-0.4c0.4-0.1,0.6,0.2,0.6,0.6l-0.2,0.8l4.9-0.8l0.2-1c0.5-2.5-1.3-4.5-3.7-4.1l-4.7,0.7
c-2.4,0.4-5,3-5.4,5.5l-1.3,7c-0.5,2.5,1.3,4.5,3.7,4.1l1.6-0.3L-199.9,356.3z"/>
</g>
<g id="g44" transform="translate(40.4323,30.3902)">
<path id="path46" d="M-199.2,353.6c0.1-0.3,0.2-0.5,0.3-0.8l0.2-0.9l-2,0.3L-199.2,353.6z"/>
</g>
<g id="g48" transform="translate(45.8945,2.3828)">
<path id="path50" fill="#0F0F0F" d="M-197.8,416.6c-0.5,0.4-1.1,0.6-1.7,0.6c-0.8,0-1.6,0-2.3,0c-0.7,0-1.5,0-2.2,0
c-0.5,0-1.1-0.1-1.5-0.4c-0.6-0.4-0.9-0.9-1-1.5c-0.1-0.7,0.1-1.3,0.5-1.8s0.9-0.8,1.5-0.8c1.8,0,3.6,0,5.3,0
c0.5,0,0.9,0.2,1.3,0.5c0.4,0.3,0.7,0.7,0.8,1.2C-196.9,415.3-197.2,416-197.8,416.6 M-199.4,412.1c-0.8,0-1.6,0-2.4,0
c-0.7,0-1.4,0-2.2,0c-0.6,0-1.1,0.1-1.6,0.3c-0.6,0.3-1,0.7-1.3,1.3c-0.2,0.5-0.3,1.1-0.2,1.6c0.1,0.6,0.3,1.1,0.7,1.6
c0.6,0.7,1.4,1,2.3,1c1.4,0,2.8,0,4.2,0c0.3,0,0.7,0,1,0c0.6-0.1,1.1-0.3,1.6-0.7c0.5-0.5,0.8-1.1,0.9-1.8c0.1-0.7,0-1.3-0.4-1.8
C-197.4,412.5-198.3,412.1-199.4,412.1 M-232.2,417.2c-0.1,0-0.1,0-0.2,0h-2.7c-0.9,0-1.8,0-2.7,0c-0.2,0-0.2,0-0.2-0.2
c0-1.4,0-2.7,0-4.1c0-0.2,0-0.2,0.2-0.2c1.7,0,3.5,0,5.2,0c1.1,0,1.9,0.6,2.1,1.8C-230.2,415.8-230.9,416.9-232.2,417.2
M-230.9,412.7c-0.5-0.4-1-0.6-1.6-0.6c-2,0-4,0-6.1,0c-0.2,0-0.2,0-0.2,0.2c0,1.8,0,3.6,0,5.4c0,0.2,0.1,0.2,0.2,0.2
c1,0,2,0,3.1,0c1,0,2,0,3,0c0.2,0,0.5,0,0.7-0.1c1.1-0.5,1.8-1.3,1.9-2.5C-229.7,414.3-230,413.4-230.9,412.7 M-213,413.7
c-0.2,0.1-0.3,0.1-0.5,0.1c-2.3,0-4.5,0-6.8,0c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0-0.4,0-0.6s0-0.2,0.2-0.2c1.2,0,2.4,0,3.5,0h3.5
c0.3,0,0.4,0.1,0.5,0.4C-212.7,413.4-212.8,413.6-213,413.7 M-213.5,412.1c-2.5,0-5,0-7.6,0c-0.2,0-0.2,0.1-0.2,0.2
c0,0.7,0,1.4,0,2.1c0,0.2,0,0.2,0.2,0.2c1.3,0,2.5,0,3.8,0c1.1,0,2.3,0,3.4,0c0.3,0,0.6,0,0.9-0.1c0.5-0.2,0.9-0.8,0.7-1.4
C-212.4,412.3-212.8,412.1-213.5,412.1 M-224.8,415.3c-0.1,0.2-0.3,0.4-0.5,0.4c-0.3,0-0.5,0-0.8,0c-0.2-0.1-0.4-0.4-0.4-0.6
c0-0.3,0.3-0.6,0.5-0.6h0.3c0.2,0,0.5-0.1,0.7,0.2C-224.7,414.9-224.7,415.1-224.8,415.3 M-224.8,413.9c-0.3-0.2-0.7-0.2-1.1-0.2
c-0.8,0-1.5,0.9-1.3,1.7c0.2,0.6,0.7,0.9,1.5,1c0.1,0,0.2,0,0.4-0.1c0.8-0.1,1-0.6,1.1-1.1C-224,414.7-224.2,414.3-224.8,413.9
M-173.6,412.5c0,0.1,0,0.2-0.2,0.2l0,0h-2.3c-0.7,0-1.5,0-2.2,0c-0.2,0-0.3-0.1-0.3-0.3c0-0.5,0-0.9,0.1-1.4
c0.1-0.4,0.5-0.9,0.9-1c0.2,0,0.5-0.1,0.7-0.1c0.4,0,0.9,0,1.3,0c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.6c-0.2,0-0.4,0-0.6,0
c-0.6,0-1.2,0-1.8,0c-0.2,0-0.2-0.1-0.2-0.2c0-0.2,0-0.3,0-0.5s0.1-0.3,0.3-0.3c0.8,0,1.6,0,2.5,0c0.2,0,0.4,0,0.6,0.1
c0.6,0.1,0.9,0.5,1.1,1.1c0.2,0.8-0.2,1.6-1.1,1.9c-0.1,0-0.1,0-0.2,0c-0.5,0-1,0-1.5,0c-0.3,0-0.7,0.3-0.7,0.6
c0,0.1,0,0.2,0.2,0.2c0.3,0,0.6,0,0.9,0c0.7,0,1.5,0,2.2,0c0.2,0,0.2,0.1,0.2,0.2C-173.7,412-173.7,412.3-173.6,412.5
M-173.5,411.3c-0.9,0-1.9,0-2.8,0h-0.3c0.1-0.2,0.2-0.1,0.3-0.1c0.4,0,0.9,0,1.3,0c0.2,0,0.3,0,0.5-0.1c1-0.3,1.4-1.2,1.2-2.1
s-0.8-1.4-1.8-1.4s-2,0-3,0c-0.2,0-0.3,0.1-0.3,0.3c0,0.4,0,0.7,0,1.1c0,0.2,0,0.2,0.2,0.2c0.8,0,1.6,0,2.4,0
c0.3,0,0.4,0.1,0.4,0.3c0,0.2-0.1,0.3-0.4,0.3c-0.4,0-0.9,0-1.3,0c-0.2,0-0.4,0-0.6,0.1c-0.8,0.2-1.2,0.9-1.2,1.7
c0,0.5,0,0.9,0,1.4c0,0.1,0,0.2,0.2,0.2c1.7,0,3.4,0,5.2,0c0.2,0,0.2-0.1,0.2-0.2c0-0.4,0-0.8,0-1.3
C-173.3,411.3-173.4,411.3-173.5,411.3 M-194.8,415.7c-0.2,0.9-0.6,1.7-1.3,2.3c-0.4,0.4-0.9,0.6-1.5,0.8
c-0.4,0.1-0.9,0.1-1.3,0.1h-2.8c-1,0-2.1,0-3.1,0c-1.7,0-3.2-1.1-3.7-2.6c-0.5-1.4-0.3-2.7,0.6-3.9c0.6-0.8,1.3-1.2,2.2-1.4
c0.3-0.1,0.6-0.1,0.9-0.1c2.2,0,4.3,0,6.5,0c0.9,0,1.6,0.4,2.3,0.9c0.5,0.4,0.8,0.9,1.1,1.4C-194.7,414-194.7,414.9-194.8,415.7
M-195.4,411.7c-0.4-0.4-0.8-0.7-1.3-1c-0.6-0.3-1.1-0.4-1.8-0.4c-1.1,0-2.2,0-3.3,0c-1,0-1.9,0-2.9,0c-0.3,0-0.6,0-1,0
c-0.9,0.2-1.8,0.6-2.5,1.3c-0.5,0.4-0.8,1-1.1,1.6c-0.4,1-0.5,1.9-0.2,2.9s0.8,1.9,1.6,2.5c0.9,0.7,1.8,1,2.9,1c2.1,0,4.2,0,6.3,0
c0.3,0,0.6-0.1,0.9-0.1c0.6-0.2,1.2-0.4,1.7-0.8c0.7-0.5,1.2-1.1,1.5-1.9c0.4-0.8,0.5-1.7,0.3-2.6
C-194.3,413.2-194.7,412.4-195.4,411.7 M-228.4,416.7c-0.2,0.3-0.4,0.7-0.6,1c-0.3,0.4-0.7,0.6-1.1,0.9c-0.5,0.3-1,0.4-1.5,0.5
c-1.4,0-2.8,0-4.2,0c-1.4,0-2.9,0-4.3,0c-0.2,0-0.2,0-0.2-0.2c0-2.5,0-5.1,0-7.6c0-0.2,0.1-0.2,0.2-0.2c2.8,0,5.6,0,8.4,0
c0.9,0,1.7,0.4,2.4,1c0.5,0.5,1,1.1,1.2,1.8c0.1,0.3,0.2,0.6,0.2,0.9C-228,415.3-228.1,416-228.4,416.7 M-229.3,411.1
c-0.7-0.5-1.5-0.9-2.4-0.9c-3,0-6.1,0-9.1,0c-0.2,0-0.2,0-0.2,0.2c0,3,0,5.9,0,8.9c0,0.2,0.1,0.2,0.2,0.2c1.5,0,3.1,0,4.6,0h4.5
c0.2,0,0.3,0,0.5,0c1.2-0.2,2.2-0.9,2.9-1.9c0.5-0.7,0.7-1.4,0.8-2.2c0.1-0.7,0-1.5-0.3-2.1C-228,412.4-228.5,411.7-229.3,411.1
M-210.7,419c-0.4,0-0.8,0-1.3,0c-0.1,0-0.2,0-0.2-0.2c0-0.5,0-1,0-1.4c0-0.5-0.5-1.3-1-1.5c-0.3-0.1-0.5-0.1-0.8-0.1
c-2.3,0-4.7,0-7,0c-0.2,0-0.3,0.1-0.3,0.3c0,0.9,0,1.8,0,2.7c0,0.2,0,0.2-0.2,0.2c-0.4,0-0.8,0-1.2,0c-0.2,0-0.2,0-0.2-0.2
c0-2.3,0-4.6,0-6.9c0-0.2,0-0.4,0-0.7c0-0.2,0-0.3,0.3-0.3c1.6,0,3.3,0,4.9,0s3.2,0,4.9,0c1,0,2,0.8,2.3,1.8c0.2,1,0,1.8-0.7,2.4
c-0.1,0.1-0.2,0.2,0,0.4c0.2,0.2,0.4,0.5,0.5,0.7c0.2,0.3,0.3,0.7,0.3,1.1c0,0.5,0,0.9,0,1.4C-210.5,418.9-210.6,419-210.7,419
M-209.9,417.2c-0.1-0.6-0.3-1.1-0.7-1.6c-0.1-0.1-0.1-0.2,0-0.3c0.2-0.2,0.3-0.5,0.4-0.7c0.3-0.6,0.4-1.3,0.2-1.9
c-0.2-0.7-0.5-1.3-1.1-1.7c-0.6-0.4-1.2-0.7-1.9-0.7c-1.7,0-3.4,0-5.1,0c-1.8,0-3.6,0-5.4,0c-0.2,0-0.2,0-0.2,0.2c0,3,0,6,0,9
c0,0.2,0,0.2,0.2,0.2c0.9,0,1.7,0,2.6,0c0.2,0,0.2,0,0.2-0.2c0-0.9,0-1.8,0-2.7c0-0.2,0.1-0.2,0.2-0.2c2,0,4,0,6,0
c0.2,0,0.4,0,0.7,0c0.5,0.1,0.9,0.6,0.9,1c0,0.6,0,1.3,0,1.9c0,0.1,0,0.2,0.2,0.2c0.9,0,1.8,0,2.7,0c0.2,0,0.2-0.1,0.2-0.2
c0-0.5,0-1.1,0-1.6C-209.8,417.6-209.8,417.4-209.9,417.2 M-242.4,411.8c0,0.2,0,0.3-0.3,0.3c-2.1,0-4.1,0-6.2,0
c-0.4,0-0.8,0-1.2,0c-1.1-0.1-2.3,0.9-2.6,1.8c-0.4,1-0.2,2,0.4,2.9c0.4,0.5,1,0.9,1.7,1c0.1,0,0.3,0,0.4,0c2.5,0,5.1,0,7.6,0
c0.2,0,0.3,0,0.2,0.2c0,0.2,0,0.4,0,0.6s0,0.2-0.2,0.2c-1.4,0-2.8,0-4.1,0c-1.3,0-2.6,0-3.9,0c-0.9,0-1.8-0.3-2.5-0.9
c-0.6-0.5-1-1.2-1.2-1.9c-0.3-1.3-0.2-2.4,0.6-3.5c0.6-0.9,1.5-1.3,2.5-1.6c0.2-0.1,0.5-0.1,0.7-0.1c2.6,0,5.3,0,7.9,0
c0.2,0,0.3,0,0.2,0.3C-242.4,411.4-242.4,411.6-242.4,411.8 M-242,410.3c-2.5,0-5,0-7.6,0c-0.6,0-1.2,0-1.8,0.1
c-0.7,0.1-1.3,0.4-1.8,0.7c-0.6,0.5-1.1,1-1.5,1.7c-0.5,1-0.6,2-0.4,3.1c0.2,1,0.7,1.9,1.4,2.5c0.9,0.7,1.8,1.1,3,1.2
c1.4,0,2.8,0,4.2,0c1.5,0,3,0,4.5,0c0.2,0,0.2,0,0.2-0.2c0-0.6,0-1.3,0-1.9c0-0.2,0-0.3-0.3-0.3c-2.7,0-5.3,0-8,0
c-0.8,0-1.4-0.3-1.8-0.9c-0.3-0.4-0.5-1-0.5-1.5c0-0.6,0.3-1.1,0.7-1.5c0.4-0.3,0.8-0.6,1.4-0.6c2.7,0,5.5,0,8.2,0
c0.2,0,0.2,0,0.2-0.2c0-0.7,0-1.3,0-2C-241.7,410.3-241.8,410.3-242,410.3 M-180.1,418.9c-0.4,0-0.8,0-1.2,0c-0.2,0-0.2,0-0.2-0.2
c0-1.6,0-3.3,0-4.9c0-0.6-0.3-1.2-0.8-1.5c-0.3-0.2-0.6-0.3-0.9-0.3c-0.7,0-1.4,0-2.1,0c-0.2,0-0.2,0-0.2,0.2c0,2.2,0,4.3,0,6.5
c0,0.2,0,0.3-0.3,0.3s-0.7,0-1,0c-0.2,0-0.2-0.1-0.2-0.2c0-2.2,0-4.3,0-6.5c0-0.2-0.1-0.3-0.3-0.3c-0.7,0-1.4,0-2,0
s-1.2,0.3-1.5,0.8c-0.2,0.3-0.3,0.6-0.3,1c0,1.6,0,3.2,0,4.9c0,0.2,0,0.3-0.3,0.3c-0.4,0-0.8,0-1.2,0c-0.1,0-0.2,0-0.2-0.2
c0-1.9,0-3.8,0-5.7c0-0.9,0.8-1.8,1.6-2c0.3-0.1,0.7-0.1,1-0.1c1.3,0,2.6,0,3.9,0c1.4,0,2.8,0,4.2,0c0.9,0,1.5,0.4,2,1.1
c0.2,0.3,0.3,0.7,0.3,1.1c0,1.8,0,3.7,0,5.5C-179.9,418.9-179.9,418.9-180.1,418.9 M-180.3,411c-0.6-0.5-1.2-0.7-2-0.7h-8.2
c-0.3,0-0.6,0-0.9,0.1c-0.6,0.2-1.1,0.5-1.5,1s-0.7,1-0.7,1.7c0,2.1,0,4.3,0,6.4c0,0.2,0,0.2,0.2,0.2c0.9,0,1.7,0,2.6,0
c0.2,0,0.3,0,0.3-0.2c0-1.9,0-3.7,0-5.6c0-0.4,0.2-0.8,0.6-1c0.2-0.1,0.5-0.1,0.7-0.1c0.4,0,0.8,0,1.2,0c0.2,0,0.3,0.1,0.3,0.3
c0,2.2,0,4.3,0,6.5c0,0.2,0,0.2,0.2,0.2c0.8,0,1.6,0,2.4,0c0.2,0,0.2-0.1,0.2-0.2c0-1.5,0-3.1,0-4.6c0-0.6,0-1.3,0-1.9
c0-0.1,0-0.2,0.1-0.2c0.5,0,1.1,0,1.6,0c0.6,0,1,0.5,1,1.1c0,1.8,0,3.7,0,5.5c0,0.2,0,0.2,0.2,0.2c0.9,0,1.7,0,2.6,0
c0.2,0,0.2-0.1,0.2-0.2c0-2,0-4,0-6C-179.2,412.4-179.6,411.6-180.3,411"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -0,0 +1,152 @@
//========================================================================
//
// DateInfo.cc
//
// Copyright (C) 2008, 2018, 2019, 2021, 2022 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2009 Carlos Garcia Campos <carlosgc@gnome.org>
// Copyright (C) 2015 André Guerreiro <aguerreiro1985@gmail.com>
// Copyright (C) 2015 André Esser <bepandre@hotmail.com>
// Copyright (C) 2016, 2018, 2021 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, <info@kdab.com>. Work sponsored by Technische Universität Dresden
// Copyright (C) 2021 Albert Astals Cid <aacid@kde.org>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
//========================================================================
//
// Based on code from pdfinfo.cc
//
// Copyright 1998-2003 Glyph & Cog, LLC
//
//========================================================================
#include <config.h>
#include "glibc.h"
#include "gmem.h"
#include "DateInfo.h"
#include "UTF.h"
#include <cstdio>
#include <cstring>
/* See PDF Reference 1.3, Section 3.8.2 for PDF Date representation */
bool parseDateString(const GooString *date, int *year, int *month, int *day, int *hour, int *minute, int *second, char *tz, int *tzHour, int *tzMinute)
{
Unicode *u;
int len = TextStringToUCS4(date->toStr(), &u);
GooString s;
for (int i = 0; i < len; i++) {
// Ignore any non ASCII characters
if (u[i] < 128) {
s.append(u[i]);
}
}
gfree(u);
const char *dateString = s.c_str();
if (strlen(dateString) < 2) {
return false;
}
if (dateString[0] == 'D' && dateString[1] == ':') {
dateString += 2;
}
*month = 1;
*day = 1;
*hour = 0;
*minute = 0;
*second = 0;
*tz = 0x00;
*tzHour = 0;
*tzMinute = 0;
if (sscanf(dateString, "%4d%2d%2d%2d%2d%2d%c%2d%*c%2d", year, month, day, hour, minute, second, tz, tzHour, tzMinute) > 0) {
/* Workaround for y2k bug in Distiller 3 stolen from gpdf, hoping that it won't
* be used after y2.2k */
if (*year < 1930 && strlen(dateString) > 14) {
int century, years_since_1900;
if (sscanf(dateString, "%2d%3d%2d%2d%2d%2d%2d", &century, &years_since_1900, month, day, hour, minute, second) == 7) {
*year = century * 100 + years_since_1900;
} else {
return false;
}
}
if (*year <= 0) {
return false;
}
return true;
}
return false;
}
GooString *timeToDateString(const time_t *timeA)
{
const time_t timet = timeA ? *timeA : time(nullptr);
struct tm localtime_tm;
localtime_r(&timet, &localtime_tm);
char buf[50];
strftime(buf, sizeof(buf), "D:%Y%m%d%H%M%S", &localtime_tm);
GooString *dateString = new GooString(buf);
// strftime "%z" does not work on windows (it prints zone name, not offset)
// calculate time zone offset by comparing local and gmtime time_t value for same
// time.
const time_t timeg = timegm(&localtime_tm);
const int offset = static_cast<int>(difftime(timeg, timet)); // find time zone offset in seconds
if (offset > 0) {
dateString->appendf("+{0:02d}'{1:02d}'", offset / 3600, (offset % 3600) / 60);
} else if (offset < 0) {
dateString->appendf("-{0:02d}'{1:02d}'", -offset / 3600, (-offset % 3600) / 60);
} else {
dateString->append("Z");
}
return dateString;
}
// Convert PDF date string to time. Returns -1 if conversion fails.
time_t dateStringToTime(const GooString *dateString)
{
int year, mon, day, hour, min, sec, tz_hour, tz_minute;
char tz;
struct tm tm;
time_t time;
if (!parseDateString(dateString, &year, &mon, &day, &hour, &min, &sec, &tz, &tz_hour, &tz_minute)) {
return -1;
}
tm.tm_year = year - 1900;
tm.tm_mon = mon - 1;
tm.tm_mday = day;
tm.tm_hour = hour;
tm.tm_min = min;
tm.tm_sec = sec;
tm.tm_wday = -1;
tm.tm_yday = -1;
tm.tm_isdst = -1; /* 0 = DST off, 1 = DST on, -1 = don't know */
/* compute tm_wday and tm_yday and check date */
time = timegm(&tm);
if (time == (time_t)-1) {
return time;
}
time_t offset = (tz_hour * 60 + tz_minute) * 60;
if (tz == '-') {
offset *= -1;
}
time -= offset;
return time;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View file

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" baseProfile="tiny" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
x="0px" y="0px" viewBox="373.5 287.6 1194.9 218.4" xml:space="preserve">
<g>
<g>
<path fill="#D5E14D" d="M888.2,307c-0.4-9.1,6.9-17.7,15.8-19.1c7.3-0.3,14.6,0,21.9-0.1c10.5-1.1,20.3,8.8,19.8,19.2
c0,10.4,0,20.9,0,31.3c-6.3,0.1-12.5,0-18.8,0c0-10.6,0.1-21.2,0-31.8c-7,0.1-13.9,0-20.9,0c-0.1,58.8,0,117.7,0,176.5
c7.2,0,14.4,0.1,21.5-0.1c-0.1-28.5,0-57,0-85.4c-3.2,0-6.3,0-9.5,0c0-5.7,0-11.3,0-17c9.2,0,18.5,0,27.7,0
c0,39.9,0.1,79.9,0,119.8c-12.9-0.1-25.8,0-38.7,0c-7.5,0-14.9-4.8-17.7-11.8c-1.5-3.7-1-7.7-1-11.5
C888.3,420.3,888.3,363.6,888.2,307z"/>
<g>
<path fill="#D5E14D" d="M994.2,323.5c12.3,0,24.5-0.1,36.8,0c7.6-0.1,15.3,4,18.5,11c1.3,2.6,1,5.6,1,8.5c0,18.7,0,37.3,0,56
c-0.4,7.9-6,16-14.2,17.3c6,27.9,11.9,55.9,17.8,83.9c-5.7,0-11.4,0-17.1,0c-6.4-27.7-12.8-55.3-19.2-83c-2,0-4.1,0-6.1,0
c0,27.8,0,55.5,0,83.3c-5.8,0-11.7,0-17.5,0C994.3,441.5,994.3,382.5,994.2,323.5z M1012,340.8c0,19.2,0,38.3,0,57.5
c6.8,0,13.7,0,20.5,0c0-19.2,0-38.3,0-57.5C1025.7,340.8,1018.8,340.8,1012,340.8z"/>
</g>
<g>
<path fill="#D5E14D" d="M1098,339.9c0-8,6.7-15.8,14.9-16.1c8-0.1,16.1,0,24.1-0.1c4.1-0.1,8.4,1,11.6,3.6
c3.7,3,5.7,7.8,5.7,12.6c0,53.4,0,106.9,0,160.3c-5.8,0-11.5,0-17.3,0c0-28,0-56,0-84c-7.2,0-14.3,0-21.5,0c0,28,0,56,0,84
c-5.8,0-11.7,0-17.5,0C1098,446.8,1098,393.4,1098,339.9z M1116,341.8c0,18.9-0.1,37.9,0,56.8c6.8-0.1,13.6,0,20.5,0
c0-18.9,0-37.8,0-56.8C1129.7,341.8,1122.8,341.7,1116,341.8z"/>
</g>
<path fill="#D5E14D" d="M1198.3,338.9c0.1-7.8,6.8-15.1,14.7-15.2c9.8,0,19.7,0,29.5,0c0,5.3,0,10.5,0,15.8c-8.8,0-17.6,0-26.4,0
c-0.1,19.8,0,39.5,0,59.3c7.2,0,14.5,0,21.7,0c0,5.8,0,11.7,0,17.5c-7.3,0-14.5,0-21.8,0c0,28,0,56,0,84c-5.9,0-11.8,0-17.8,0
C1198.3,446.5,1198.3,392.7,1198.3,338.9z"/>
<path fill="#D5E14D" d="M1286.5,323.8c6.2,0,12.3,0,18.5,0c0.1,16.3-0.2,32.7,0.2,49.1c3.1,5.2,6.8,10.2,10.1,15.3
c3.2-5.1,7-9.8,9.9-15.1c0.3-16.4,0.1-32.9,0.1-49.3c6.2,0,12.4,0,18.5,0c-0.1,11.8,0,23.5,0,35.3c-0.1,5.5,0.5,11.1-1.5,16.3
c-4.1,10.9-10.3,20.9-16.4,30.8c7,11.2,14.5,22.5,17.7,35.5c0.4,19.6,0.1,39.3,0.1,58.9c-5.7,0-11.5,0-17.2,0
c-0.1-19.7,0.1-39.4-0.1-59.1c-2.9-6-7.3-11.2-10.8-16.9c-3.6,5.5-7.3,10.8-10.9,16.3c0,19.9,0.1,39.8,0,59.8
c-6.1-0.1-12.1,0-18.2,0c0-18.5,0-37,0-55.5c-0.1-5,2.3-9.6,4.3-14.1c4.3-8.7,9.3-16.9,14.7-25c-7.2-11.1-15.3-22.1-18.8-35
C1286.2,355.2,1286.7,339.5,1286.5,323.8z"/>
</g>
<g>
<path fill="#F79226" d="M1524.7,384.8c-9.6,0-19.2,0-28.8,0c0,18.4,0,36.9,0,55.3c9.6,0,19.2,0,28.8,0
C1524.7,421.7,1524.7,403.3,1524.7,384.8z"/>
<path fill="#F79226" d="M1563.5,442.4c6.9-20.1,6.5-42.5-0.7-62.4c-6.3-17-17.4-32.1-32-42.9c-20.1-15.2-46.4-21.6-71.2-17.4
c-31.2,4.7-59.1,26.7-71.3,55.8c-12.3,28.6-9.2,63.2,8.3,89c16.8,25.5,46.8,41.8,77.4,41.5c20.4,0.4,40.9-6.5,57.1-18.8
C1546.1,476,1557.6,460.2,1563.5,442.4z M1418.6,372l37.4,0c2.3,2.3,4.3,4.2,6.7,6.5c0,5.1,0,10.1,0,15.2c-3.7,0-7.4,0-11.1,0
c0-2.9,0-5.9,0-8.9c-8.9,0-17.7,0-26.6,0c0,18.4,0,36.9,0,55.3c8.8,0,17.7,0,26.6,0c0-2.9,0-5.9,0-8.9c3.7,0,7.4,0,11.1,0
c0,5.1,0,10.1,0,15.2c-2.3,2.3-4.3,4.2-6.6,6.5h-37.5l-6.3-6.2l0-68.5L1418.6,372z M1476,384.8V372h55.1l6.4,6.3v68.4l-6.4,6.3
h-55.3c0-4.4,0.1-8.4,0.1-12.9c1.7,0,5,0,6.6,0c0-18.4,0-36.9,0-55.3L1476,384.8L1476,384.8z"/>
</g>
<g>
<path fill="#F79226" d="M466.5,323.5c6.1,0,12.1,0,18.2,0c0.1,53,0,106,0,159c6.8,0,13.7,0,20.5,0c0-53-0.1-106,0.1-159.1
c6.2,0.1,12.3,0,18.5,0.1c-0.1,50.8,0,101.6,0,152.4c-0.1,3.7,0.3,7.4-0.6,11c-1.7,7.7-9.3,13.6-17.2,13.5c-7.3,0-14.7,0-22,0
c-9.6-0.2-17.7-9.1-17.5-18.6C466.4,429.1,466.5,376.3,466.5,323.5z"/>
<g>
<path fill="#F79226" d="M570,323.5c12.6,0.1,25.3-0.1,37.9,0.1c8.9,0.1,18.5,6.9,18.6,16.4c0,19.3,0,38.7,0,58
c-0.1,8.4-5.7,17.1-14.3,18.6c6,27.9,11.8,55.9,17.8,83.8c-5.7,0-11.4,0-17.2,0c-6.3-27.6-12.8-55.1-19.1-82.7
c-2.1,0-4.2,0-6.3,0c0,27.6,0,55.2,0,82.8c-5.8,0-11.7,0-17.5,0C570,441.5,570,382.5,570,323.5z M588.2,341c0,19.3,0,38.5,0,57.7
c6.7,0,13.5,0,20.2,0c0-19.3,0-38.5,0-57.8C601.7,341,595,341,588.2,341z"/>
</g>
<g>
<path fill="#F79226" d="M676.2,323.5c13.2,0,26.5-0.1,39.7,0c8.4,0,16.3,6.9,16.6,15.4c0,18.7,0,37.4,0,56
c0,5.2-3.7,9.3-7.3,12.5c3.5,2.9,6.9,6.7,7.3,11.5c0.5,7.6,0.2,15.3,0.3,22.9c-0.1,11.6,0.2,23.3-0.3,35
c-0.2,4.9,0.8,10.3-1.7,14.8c-2.7,5.5-8.8,8.7-14.8,8.7c-13.2,0-26.5,0-39.7,0C676.2,441.5,676.3,382.5,676.2,323.5z M694.5,341
c0,19.3,0,38.5,0,57.8c6.8,0,13.5,0,20.2,0c0-19.3,0-38.5,0-57.7C708,341,701.3,341,694.5,341z M694.5,417.2
c0,21.9,0,43.9,0,65.8c6.8,0,13.5,0,20.3,0c0-21.9,0-43.8,0-65.7C708,417.2,701.3,417.3,694.5,417.2z"/>
</g>
<g>
<path fill="#F79226" d="M791.4,324.5c5.4-1.5,11-0.8,16.6-1c6.1,0.1,12.7-0.8,18.2,2.3c5.5,2.9,10.5,8.5,10.3,15.1
c0,45.4,0,90.7,0,136.1c-0.1,3.9,0.5,8.1-1.4,11.8c-2.8,5.9-8.4,10.9-15.1,11.6c-6,0.1-12,0-18,0c-3.5,0-7.2,0.3-10.5-1
c-7-2.8-12.8-9.7-12.6-17.5c0-45.3,0-90.6,0-136c0-3.6-0.4-7.5,1.2-10.9C782.2,330.2,786.4,326.3,791.4,324.5z M798.3,341.3
c0,46.9,0,93.8,0,140.7c6.5,0,13,0,19.5,0c0-46.9,0-93.8,0-140.7C811.3,341.3,804.8,341.3,798.3,341.3z"/>
</g>
<polygon fill="#F79226" points="390.7,305.3 373.5,305.3 373.5,287.6 428.5,287.6 428.5,305.3 411.3,305.3 411.3,500.3
390.7,500.3 "/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<svg id="svg2" version="1.1" viewBox="0 0 264 73" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(0.880001, 0, 0, 0.875525, 0.000039, -0.000066)">
<path d="M 286.97198486328125 0.484000027179718 L 300 0.484000027179718 L 281.63299560546875 29.05699920654297 L 278.65399169921875 51.347999572753906 L 266.8800048828125 51.347999572753906 L 270.33099365234375 25.913000106811523 L 258.5570068359375 0.484000027179718 L 271.2720031738281 0.484000027179718 L 277.5539855957031 14.928999900817871 Z" id="_43443024" style="fill: rgb(255, 255, 255);"/>
<path d="M 149.7729949951172 31.253000259399414 L 165.30999755859375 31.253000259399414 L 166.88099670410156 19.951000213623047 L 151.49899291992188 19.951000213623047 L 152.60000610351562 11.78600025177002 L 170.49099731445312 11.78600025177002 L 172.2209930419922 0.484000027179718 L 142.55099487304688 0.484000027179718 L 135.48699951171875 51.347999572753906 L 164.9980010986328 51.347999572753906 L 166.5679931640625 40.04100036621094 L 148.67300415039062 40.04100036621094 Z" id="_43441624" style="fill: rgb(255, 255, 255);"/>
<path id="_43775888" d="M 59.352 26.227 L 63.277 15.71 L 64.534 26.227 L 59.353 26.227 Z M 55.114 36.274 L 65.787 36.274 L 67.673 51.344 L 86.98 51.344 L 95.929 23.715 L 100.325 51.344 L 110.53 51.344 L 121.832 22.146 L 123.716 51.344 L 135.017 51.344 L 131.878 0.482 L 118.377 0.482 L 107.858 27.325 L 103.776 0.482 L 91.689 0.482 L 77.874 42.239 L 72.694 0.482 L 57.624 0.482 L 40.826 42.708 L 43.024 26.227 L 22.614 26.227 L 21.2 36.272 L 30.149 36.272 L 29.52 39.726 C 27.951 40.667 24.341 40.825 22.928 40.825 C 21.516 40.825 10.998 39.884 11.468 28.58 C 11.936 17.279 27.005 6.761 44.901 12.569 L 46.629 1.737 C 34.698 -2.343 3.363 -0.059 0.161 27.952 C -1.721 44.436 13.35 52.285 23.395 52.13 C 29.203 52.444 35.798 50.246 38.151 48.989 L 37.367 51.344 L 49.298 51.344 L 55.106 36.274 Z" style="fill: rgb(255, 255, 255);"/>
<path id="_44102912" d="M 245.841 0.014 C 237.678 -0.301 225.904 4.409 221.98 23.404 C 218.056 42.397 228.572 50.09 238.306 51.347 C 248.039 52.602 261.697 46.48 264.207 28.271 C 266.722 10.06 257.768 0.485 245.841 0.014 Z M 244.588 10.846 C 247.884 10.846 254.947 13.044 253.22 26.228 C 251.494 39.415 243.331 40.985 240.349 40.672 C 237.364 40.356 231.243 38.317 232.97 26.228 C 234.7 14.143 241.135 10.688 244.591 10.846 Z" style="fill: rgb(255, 255, 255);"/>
<path id="_44104296" d="M 196.234 19.951 L 202.828 19.951 C 207.693 19.951 208.636 16.811 208.791 15.556 C 208.948 14.3 207.536 11.788 205.026 11.788 L 197.334 11.788 L 196.238 19.951 Z M 193.408 40.044 L 202.357 40.044 C 207.222 40.044 208.321 36.277 208.478 35.02 C 208.635 33.765 207.222 31.253 204.711 31.253 L 194.665 31.253 L 193.41 40.044 Z M 180.226 51.347 L 187.291 0.485 L 208.953 0.485 C 214.135 0.485 221.669 6.452 220.728 14.456 C 219.786 22.463 217.274 22.935 215.547 24.19 C 218.217 26.543 220.884 30.31 219.786 37.375 C 218.686 44.441 212.878 51.347 202.676 51.347 L 180.227 51.347 Z" style="fill: rgb(255, 255, 255);"/>
<path id="path12" d="M 61.895 56.917 L 55.235 56.917 L 39.537 83.346 L 58.226 83.346 L 58.226 77.487 L 50.609 77.487 L 58.226 63.825 L 69.268 83.378 L 77.779 83.378 L 77.779 83.316 L 91.07 83.316 C 102.573 83.316 108.341 78.875 108.341 70.087 C 108.341 68.575 108.155 67.157 107.754 65.831 L 118.362 83.317 L 123.451 83.317 L 138.716 56.95 L 130.636 56.95 L 121.105 74.217 L 111.052 56.948 L 102.356 56.948 L 104.761 60.895 C 101.956 58.243 97.915 56.948 92.642 56.948 L 75.156 56.948 L 75.156 78.873 L 61.895 56.917 L 61.895 56.917 Z M 82.681 62.898 L 92.705 62.898 C 97.915 62.898 100.567 65.181 100.567 69.744 C 100.567 72.49 99.736 74.495 98.162 75.542 C 96.65 76.622 93.783 77.146 89.774 77.146 L 82.712 77.146 L 82.712 62.898 L 82.681 62.898 Z" style="fill-opacity: 1; fill: rgb(255, 255, 255);"/>
<path d="M 149.9720001220703 56.91699981689453 L 143.27999877929688 56.91699981689453 L 127.64299774169922 83.34500122070312 L 135.53900146484375 83.34500122070312 L 135.53900146484375 83.28299713134766 L 146.33200073242188 83.28299713134766 L 146.33200073242188 77.39299774169922 L 138.7779998779297 77.39299774169922 L 146.27200317382812 63.79399871826172 L 157.31199645996094 83.34500122070312 L 165.9149932861328 83.34500122070312 L 165.9149932861328 83.28299713134766 L 170.2949981689453 83.28299713134766 L 170.2949981689453 67.33999633789062 L 190.2480010986328 83.28299713134766 L 195.42799377441406 83.28299713134766 L 195.42799377441406 56.91699981689453 L 188.52000427246094 56.91699981689453 L 188.52000427246094 72.67400360107422 L 168.3820037841797 56.91699981689453 L 163.2310028076172 56.91699981689453 L 163.2310028076172 78.84300231933594 Z" id="polygon14" style="fill-opacity: 1; fill: rgb(255, 255, 255);"/>
<path id="path16" d="M 199.376 58.395 C 198.296 59.353 197.742 61.079 197.742 63.547 L 197.742 76.622 C 197.742 79.151 198.296 80.878 199.345 81.834 C 200.363 82.791 202.212 83.284 204.928 83.284 L 220.439 83.284 C 223.123 83.284 225.065 82.791 226.083 81.834 C 227.1 80.879 227.687 79.151 227.687 76.622 L 227.687 72.952 L 220.07 72.83 L 220.07 76.9 L 205.328 76.9 L 205.328 63.054 L 220.07 63.054 L 220.07 66.662 L 227.687 66.662 L 227.687 63.547 C 227.687 60.957 227.101 59.229 226.083 58.395 C 225.065 57.378 223.277 56.885 220.439 56.885 L 204.928 56.885 C 202.244 56.917 200.393 57.38 199.376 58.395 L 199.376 58.395 Z" style="fill-opacity: 1; fill: rgb(255, 255, 255);"/>
<path d="M 237.83200073242188 66.69300079345703 L 237.83200073242188 62.89799880981445 L 258.4010009765625 62.89799880981445 L 258.4010009765625 56.91699981689453 L 230.21499633789062 56.91699981689453 L 230.21499633789062 83.28299713134766 L 258.739990234375 83.28299713134766 L 258.739990234375 77.177001953125 L 237.83200073242188 77.177001953125 L 237.83200073242188 72.48999786376953 L 249.88999938964844 72.48999786376953 L 249.88999938964844 66.69300079345703 Z" id="polygon18" style="fill-opacity: 1; fill: rgb(255, 255, 255);"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1,111 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_git_reset_h__
#define INCLUDE_git_reset_h__
#include "common.h"
#include "types.h"
#include "strarray.h"
#include "checkout.h"
/**
* @file git2/reset.h
* @brief Git reset management routines
* @ingroup Git
* @{
*/
GIT_BEGIN_DECL
/**
* Kinds of reset operation
*/
typedef enum {
GIT_RESET_SOFT = 1, /**< Move the head to the given commit */
GIT_RESET_MIXED = 2, /**< SOFT plus reset index to the commit */
GIT_RESET_HARD = 3 /**< MIXED plus changes in working tree discarded */
} git_reset_t;
/**
* Sets the current head to the specified commit oid and optionally
* resets the index and working tree to match.
*
* SOFT reset means the Head will be moved to the commit.
*
* MIXED reset will trigger a SOFT reset, plus the index will be replaced
* with the content of the commit tree.
*
* HARD reset will trigger a MIXED reset and the working directory will be
* replaced with the content of the index. (Untracked and ignored files
* will be left alone, however.)
*
* TODO: Implement remaining kinds of resets.
*
* @param repo Repository where to perform the reset operation.
*
* @param target Committish to which the Head should be moved to. This object
* must belong to the given `repo` and can either be a git_commit or a
* git_tag. When a git_tag is being passed, it should be dereferenceable
* to a git_commit which oid will be used as the target of the branch.
*
* @param reset_type Kind of reset operation to perform.
*
* @param checkout_opts Optional checkout options to be used for a HARD reset.
* The checkout_strategy field will be overridden (based on reset_type).
* This parameter can be used to propagate notify and progress callbacks.
*
* @return 0 on success or an error code
*/
GIT_EXTERN(int) git_reset(
git_repository *repo,
const git_object *target,
git_reset_t reset_type,
const git_checkout_options *checkout_opts);
/**
* Sets the current head to the specified commit oid and optionally
* resets the index and working tree to match.
*
* This behaves like `git_reset()` but takes an annotated commit,
* which lets you specify which extended sha syntax string was
* specified by a user, allowing for more exact reflog messages.
*
* See the documentation for `git_reset()`.
*
* @see git_reset
*/
GIT_EXTERN(int) git_reset_from_annotated(
git_repository *repo,
const git_annotated_commit *commit,
git_reset_t reset_type,
const git_checkout_options *checkout_opts);
/**
* Updates some entries in the index from the target commit tree.
*
* The scope of the updated entries is determined by the paths
* being passed in the `pathspec` parameters.
*
* Passing a NULL `target` will result in removing
* entries in the index matching the provided pathspecs.
*
* @param repo Repository where to perform the reset operation.
*
* @param target The committish which content will be used to reset the content
* of the index.
*
* @param pathspecs List of pathspecs to operate on.
*
* @return 0 on success or an error code < 0
*/
GIT_EXTERN(int) git_reset_default(
git_repository *repo,
const git_object *target,
const git_strarray* pathspecs);
/** @} */
GIT_END_DECL
#endif

View file

@ -0,0 +1,650 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "sysdir.h"
#include "runtime.h"
#include "str.h"
#include "fs_path.h"
#include <ctype.h>
#if GIT_WIN32
# include "fs_path.h"
# include "win32/path_w32.h"
# include "win32/utf-conv.h"
#else
# include <unistd.h>
# include <pwd.h>
#endif
#ifdef GIT_WIN32
# define REG_GITFORWINDOWS_KEY L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Git_is1"
# define REG_GITFORWINDOWS_KEY_WOW64 L"SOFTWARE\\Wow6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Git_is1"
static int expand_win32_path(git_win32_path dest, const wchar_t *src)
{
DWORD len = ExpandEnvironmentStringsW(src, dest, GIT_WIN_PATH_UTF16);
if (!len || len > GIT_WIN_PATH_UTF16)
return -1;
return 0;
}
static int win32_path_to_utf8(git_str *dest, const wchar_t *src)
{
git_win32_utf8_path utf8_path;
if (git_win32_path_to_utf8(utf8_path, src) < 0) {
git_error_set(GIT_ERROR_OS, "unable to convert path to UTF-8");
return -1;
}
/* Convert backslashes to forward slashes */
git_fs_path_mkposix(utf8_path);
return git_str_sets(dest, utf8_path);
}
static git_win32_path mock_registry;
static bool mock_registry_set;
extern int git_win32__set_registry_system_dir(const wchar_t *mock_sysdir)
{
if (!mock_sysdir) {
mock_registry[0] = L'\0';
mock_registry_set = false;
} else {
size_t len = wcslen(mock_sysdir);
if (len > GIT_WIN_PATH_MAX) {
git_error_set(GIT_ERROR_INVALID, "mock path too long");
return -1;
}
wcscpy(mock_registry, mock_sysdir);
mock_registry_set = true;
}
return 0;
}
static int lookup_registry_key(
git_win32_path out,
const HKEY hive,
const wchar_t* key,
const wchar_t *value)
{
HKEY hkey;
DWORD type, size;
int error = GIT_ENOTFOUND;
/*
* Registry data may not be NUL terminated, provide room to do
* it ourselves.
*/
size = (DWORD)((sizeof(git_win32_path) - 1) * sizeof(wchar_t));
if (RegOpenKeyExW(hive, key, 0, KEY_READ, &hkey) != 0)
return GIT_ENOTFOUND;
if (RegQueryValueExW(hkey, value, NULL, &type, (LPBYTE)out, &size) == 0 &&
type == REG_SZ &&
size > 0 &&
size < sizeof(git_win32_path)) {
size_t wsize = size / sizeof(wchar_t);
size_t len = wsize - 1;
if (out[wsize - 1] != L'\0') {
len = wsize;
out[wsize] = L'\0';
}
if (out[len - 1] == L'\\')
out[len - 1] = L'\0';
if (_waccess(out, F_OK) == 0)
error = 0;
}
RegCloseKey(hkey);
return error;
}
static int find_sysdir_in_registry(git_win32_path out)
{
if (mock_registry_set) {
if (mock_registry[0] == L'\0')
return GIT_ENOTFOUND;
wcscpy(out, mock_registry);
return 0;
}
if (lookup_registry_key(out, HKEY_CURRENT_USER, REG_GITFORWINDOWS_KEY, L"InstallLocation") == 0 ||
lookup_registry_key(out, HKEY_CURRENT_USER, REG_GITFORWINDOWS_KEY_WOW64, L"InstallLocation") == 0 ||
lookup_registry_key(out, HKEY_LOCAL_MACHINE, REG_GITFORWINDOWS_KEY, L"InstallLocation") == 0 ||
lookup_registry_key(out, HKEY_LOCAL_MACHINE, REG_GITFORWINDOWS_KEY_WOW64, L"InstallLocation") == 0)
return 0;
return GIT_ENOTFOUND;
}
static int find_sysdir_in_path(git_win32_path out)
{
size_t out_len;
if (git_win32_path_find_executable(out, L"git.exe") < 0 &&
git_win32_path_find_executable(out, L"git.cmd") < 0)
return GIT_ENOTFOUND;
out_len = wcslen(out);
/* Trim the file name */
if (out_len <= CONST_STRLEN(L"git.exe"))
return GIT_ENOTFOUND;
out_len -= CONST_STRLEN(L"git.exe");
if (out_len && out[out_len - 1] == L'\\')
out_len--;
/*
* Git for Windows usually places the command in a 'bin' or
* 'cmd' directory, trim that.
*/
if (out_len >= CONST_STRLEN(L"\\bin") &&
wcsncmp(&out[out_len - CONST_STRLEN(L"\\bin")], L"\\bin", CONST_STRLEN(L"\\bin")) == 0)
out_len -= CONST_STRLEN(L"\\bin");
else if (out_len >= CONST_STRLEN(L"\\cmd") &&
wcsncmp(&out[out_len - CONST_STRLEN(L"\\cmd")], L"\\cmd", CONST_STRLEN(L"\\cmd")) == 0)
out_len -= CONST_STRLEN(L"\\cmd");
if (!out_len)
return GIT_ENOTFOUND;
out[out_len] = L'\0';
return 0;
}
static int find_win32_dirs(
git_str *out,
const wchar_t* tmpl[])
{
git_win32_path path16;
git_str buf = GIT_STR_INIT;
git_str_clear(out);
for (; *tmpl != NULL; tmpl++) {
if (!expand_win32_path(path16, *tmpl) &&
path16[0] != L'%' &&
!_waccess(path16, F_OK)) {
win32_path_to_utf8(&buf, path16);
if (buf.size)
git_str_join(out, GIT_PATH_LIST_SEPARATOR, out->ptr, buf.ptr);
}
}
git_str_dispose(&buf);
return (git_str_oom(out) ? -1 : 0);
}
static int append_subdir(git_str *out, git_str *path, const char *subdir)
{
static const char* architecture_roots[] = {
"",
"mingw64",
"mingw32",
NULL
};
const char **root;
size_t orig_path_len = path->size;
for (root = architecture_roots; *root; root++) {
if ((*root[0] && git_str_joinpath(path, path->ptr, *root) < 0) ||
git_str_joinpath(path, path->ptr, subdir) < 0)
return -1;
if (git_fs_path_exists(path->ptr) &&
git_str_join(out, GIT_PATH_LIST_SEPARATOR, out->ptr, path->ptr) < 0)
return -1;
git_str_truncate(path, orig_path_len);
}
return 0;
}
int git_win32__find_system_dirs(git_str *out, const char *subdir)
{
git_win32_path pathdir, regdir;
git_str path8 = GIT_STR_INIT;
bool has_pathdir, has_regdir;
int error;
has_pathdir = (find_sysdir_in_path(pathdir) == 0);
has_regdir = (find_sysdir_in_registry(regdir) == 0);
if (!has_pathdir && !has_regdir)
return 0;
/*
* Usually the git in the path is the same git in the registry,
* in this case there's no need to duplicate the paths.
*/
if (has_pathdir && has_regdir && wcscmp(pathdir, regdir) == 0)
has_regdir = false;
if (has_pathdir) {
if ((error = win32_path_to_utf8(&path8, pathdir)) < 0 ||
(error = append_subdir(out, &path8, subdir)) < 0)
goto done;
}
if (has_regdir) {
if ((error = win32_path_to_utf8(&path8, regdir)) < 0 ||
(error = append_subdir(out, &path8, subdir)) < 0)
goto done;
}
done:
git_str_dispose(&path8);
return error;
}
#endif /* WIN32 */
static int git_sysdir_guess_programdata_dirs(git_str *out)
{
#ifdef GIT_WIN32
static const wchar_t *programdata_tmpls[2] = {
L"%PROGRAMDATA%\\Git",
NULL,
};
return find_win32_dirs(out, programdata_tmpls);
#else
git_str_clear(out);
return 0;
#endif
}
static int git_sysdir_guess_system_dirs(git_str *out)
{
#ifdef GIT_WIN32
return git_win32__find_system_dirs(out, "etc");
#else
return git_str_sets(out, "/etc");
#endif
}
#ifndef GIT_WIN32
static int get_passwd_home(git_str *out, uid_t uid)
{
struct passwd pwd, *pwdptr;
char *buf = NULL;
long buflen;
int error;
GIT_ASSERT_ARG(out);
if ((buflen = sysconf(_SC_GETPW_R_SIZE_MAX)) == -1)
buflen = 1024;
do {
buf = git__realloc(buf, buflen);
error = getpwuid_r(uid, &pwd, buf, buflen, &pwdptr);
buflen *= 2;
} while (error == ERANGE && buflen <= 8192);
if (error) {
git_error_set(GIT_ERROR_OS, "failed to get passwd entry");
goto out;
}
if (!pwdptr) {
git_error_set(GIT_ERROR_OS, "no passwd entry found for user");
goto out;
}
if ((error = git_str_puts(out, pwdptr->pw_dir)) < 0)
goto out;
out:
git__free(buf);
return error;
}
#endif
static int git_sysdir_guess_home_dirs(git_str *out)
{
#ifdef GIT_WIN32
static const wchar_t *global_tmpls[4] = {
L"%HOME%\\",
L"%HOMEDRIVE%%HOMEPATH%\\",
L"%USERPROFILE%\\",
NULL,
};
return find_win32_dirs(out, global_tmpls);
#else
int error;
uid_t uid, euid;
const char *sandbox_id;
uid = getuid();
euid = geteuid();
/**
* If APP_SANDBOX_CONTAINER_ID is set, we are running in a
* sandboxed environment on macOS.
*/
sandbox_id = getenv("APP_SANDBOX_CONTAINER_ID");
/*
* In case we are running setuid, use the configuration
* of the effective user.
*
* If we are running in a sandboxed environment on macOS,
* we have to get the HOME dir from the password entry file.
*/
if (!sandbox_id && uid == euid)
error = git__getenv(out, "HOME");
else
error = get_passwd_home(out, euid);
if (error == GIT_ENOTFOUND) {
git_error_clear();
error = 0;
}
return error;
#endif
}
static int git_sysdir_guess_global_dirs(git_str *out)
{
return git_sysdir_guess_home_dirs(out);
}
static int git_sysdir_guess_xdg_dirs(git_str *out)
{
#ifdef GIT_WIN32
static const wchar_t *global_tmpls[7] = {
L"%XDG_CONFIG_HOME%\\git",
L"%APPDATA%\\git",
L"%LOCALAPPDATA%\\git",
L"%HOME%\\.config\\git",
L"%HOMEDRIVE%%HOMEPATH%\\.config\\git",
L"%USERPROFILE%\\.config\\git",
NULL,
};
return find_win32_dirs(out, global_tmpls);
#else
git_str env = GIT_STR_INIT;
int error;
uid_t uid, euid;
uid = getuid();
euid = geteuid();
/*
* In case we are running setuid, only look up passwd
* directory of the effective user.
*/
if (uid == euid) {
if ((error = git__getenv(&env, "XDG_CONFIG_HOME")) == 0)
error = git_str_joinpath(out, env.ptr, "git");
if (error == GIT_ENOTFOUND && (error = git__getenv(&env, "HOME")) == 0)
error = git_str_joinpath(out, env.ptr, ".config/git");
} else {
if ((error = get_passwd_home(&env, euid)) == 0)
error = git_str_joinpath(out, env.ptr, ".config/git");
}
if (error == GIT_ENOTFOUND) {
git_error_clear();
error = 0;
}
git_str_dispose(&env);
return error;
#endif
}
static int git_sysdir_guess_template_dirs(git_str *out)
{
#ifdef GIT_WIN32
return git_win32__find_system_dirs(out, "share/git-core/templates");
#else
return git_str_sets(out, "/usr/share/git-core/templates");
#endif
}
struct git_sysdir__dir {
git_str buf;
int (*guess)(git_str *out);
};
static struct git_sysdir__dir git_sysdir__dirs[] = {
{ GIT_STR_INIT, git_sysdir_guess_system_dirs },
{ GIT_STR_INIT, git_sysdir_guess_global_dirs },
{ GIT_STR_INIT, git_sysdir_guess_xdg_dirs },
{ GIT_STR_INIT, git_sysdir_guess_programdata_dirs },
{ GIT_STR_INIT, git_sysdir_guess_template_dirs },
{ GIT_STR_INIT, git_sysdir_guess_home_dirs }
};
static void git_sysdir_global_shutdown(void)
{
size_t i;
for (i = 0; i < ARRAY_SIZE(git_sysdir__dirs); ++i)
git_str_dispose(&git_sysdir__dirs[i].buf);
}
int git_sysdir_global_init(void)
{
size_t i;
int error = 0;
for (i = 0; !error && i < ARRAY_SIZE(git_sysdir__dirs); i++)
error = git_sysdir__dirs[i].guess(&git_sysdir__dirs[i].buf);
if (error)
return error;
return git_runtime_shutdown_register(git_sysdir_global_shutdown);
}
int git_sysdir_reset(void)
{
size_t i;
int error = 0;
for (i = 0; !error && i < ARRAY_SIZE(git_sysdir__dirs); ++i) {
git_str_dispose(&git_sysdir__dirs[i].buf);
error = git_sysdir__dirs[i].guess(&git_sysdir__dirs[i].buf);
}
return error;
}
static int git_sysdir_check_selector(git_sysdir_t which)
{
if (which < ARRAY_SIZE(git_sysdir__dirs))
return 0;
git_error_set(GIT_ERROR_INVALID, "config directory selector out of range");
return -1;
}
int git_sysdir_get(const git_str **out, git_sysdir_t which)
{
GIT_ASSERT_ARG(out);
*out = NULL;
GIT_ERROR_CHECK_ERROR(git_sysdir_check_selector(which));
*out = &git_sysdir__dirs[which].buf;
return 0;
}
#define PATH_MAGIC "$PATH"
int git_sysdir_set(git_sysdir_t which, const char *search_path)
{
const char *expand_path = NULL;
git_str merge = GIT_STR_INIT;
GIT_ERROR_CHECK_ERROR(git_sysdir_check_selector(which));
if (search_path != NULL)
expand_path = strstr(search_path, PATH_MAGIC);
/* reset the default if this path has been cleared */
if (!search_path)
git_sysdir__dirs[which].guess(&git_sysdir__dirs[which].buf);
/* if $PATH is not referenced, then just set the path */
if (!expand_path) {
if (search_path)
git_str_sets(&git_sysdir__dirs[which].buf, search_path);
goto done;
}
/* otherwise set to join(before $PATH, old value, after $PATH) */
if (expand_path > search_path)
git_str_set(&merge, search_path, expand_path - search_path);
if (git_str_len(&git_sysdir__dirs[which].buf))
git_str_join(&merge, GIT_PATH_LIST_SEPARATOR,
merge.ptr, git_sysdir__dirs[which].buf.ptr);
expand_path += strlen(PATH_MAGIC);
if (*expand_path)
git_str_join(&merge, GIT_PATH_LIST_SEPARATOR, merge.ptr, expand_path);
git_str_swap(&git_sysdir__dirs[which].buf, &merge);
git_str_dispose(&merge);
done:
if (git_str_oom(&git_sysdir__dirs[which].buf))
return -1;
return 0;
}
static int git_sysdir_find_in_dirlist(
git_str *path,
const char *name,
git_sysdir_t which,
const char *label)
{
size_t len;
const char *scan, *next = NULL;
const git_str *syspath;
GIT_ERROR_CHECK_ERROR(git_sysdir_get(&syspath, which));
if (!syspath || !git_str_len(syspath))
goto done;
for (scan = git_str_cstr(syspath); scan; scan = next) {
/* find unescaped separator or end of string */
for (next = scan; *next; ++next) {
if (*next == GIT_PATH_LIST_SEPARATOR &&
(next <= scan || next[-1] != '\\'))
break;
}
len = (size_t)(next - scan);
next = (*next ? next + 1 : NULL);
if (!len)
continue;
GIT_ERROR_CHECK_ERROR(git_str_set(path, scan, len));
if (name)
GIT_ERROR_CHECK_ERROR(git_str_joinpath(path, path->ptr, name));
if (git_fs_path_exists(path->ptr))
return 0;
}
done:
if (name)
git_error_set(GIT_ERROR_OS, "the %s file '%s' doesn't exist", label, name);
else
git_error_set(GIT_ERROR_OS, "the %s directory doesn't exist", label);
git_str_dispose(path);
return GIT_ENOTFOUND;
}
int git_sysdir_find_system_file(git_str *path, const char *filename)
{
return git_sysdir_find_in_dirlist(
path, filename, GIT_SYSDIR_SYSTEM, "system");
}
int git_sysdir_find_global_file(git_str *path, const char *filename)
{
return git_sysdir_find_in_dirlist(
path, filename, GIT_SYSDIR_GLOBAL, "global");
}
int git_sysdir_find_xdg_file(git_str *path, const char *filename)
{
return git_sysdir_find_in_dirlist(
path, filename, GIT_SYSDIR_XDG, "global/xdg");
}
int git_sysdir_find_programdata_file(git_str *path, const char *filename)
{
return git_sysdir_find_in_dirlist(
path, filename, GIT_SYSDIR_PROGRAMDATA, "ProgramData");
}
int git_sysdir_find_template_dir(git_str *path)
{
return git_sysdir_find_in_dirlist(
path, NULL, GIT_SYSDIR_TEMPLATE, "template");
}
int git_sysdir_find_homedir(git_str *path)
{
return git_sysdir_find_in_dirlist(
path, NULL, GIT_SYSDIR_HOME, "home directory");
}
int git_sysdir_expand_global_file(git_str *path, const char *filename)
{
int error;
if ((error = git_sysdir_find_global_file(path, NULL)) == 0) {
if (filename)
error = git_str_joinpath(path, path->ptr, filename);
}
return error;
}
int git_sysdir_expand_homedir_file(git_str *path, const char *filename)
{
int error;
if ((error = git_sysdir_find_homedir(path)) == 0) {
if (filename)
error = git_str_joinpath(path, path->ptr, filename);
}
return error;
}

View file

@ -0,0 +1,684 @@
<?xml version="1.0"?>
<!-- This is the ES-DE find rules configuration file for Windows for portable installations -->
<ruleList>
<emulator name="OS-SHELL">
<!-- Operating system shell -->
<rule type="systempath">
<entry>cmd.exe</entry>
</rule>
</emulator>
<emulator name="RETROARCH">
<rule type="staticpath">
<!-- Portable installation -->
<entry>%ESPATH%\Emulators\RetroArch-Win64\retroarch.exe</entry>
<entry>%ESPATH%\Emulators\RetroArch\retroarch.exe</entry>
<entry>%ESPATH%\..\Emulators\RetroArch-Win64\retroarch.exe</entry>
<entry>%ESPATH%\..\Emulators\RetroArch\retroarch.exe</entry>
</rule>
</emulator>
<core name="RETROARCH">
<rule type="corepath">
<entry>%EMUPATH%\cores</entry>
</rule>
</core>
<emulator name="3DSEN">
<!-- Nintendo NES and Famicom emulator 3dSen -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\3dSen\3dSen.exe</entry>
<entry>%ESPATH%\..\Emulators\3dSen\3dSen.exe</entry>
</rule>
</emulator>
<emulator name="ACE-DL">
<!-- Amstrad CPC emulator ACE-DL -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\AceDL\AceDL.exe</entry>
<entry>%ESPATH%\..\Emulators\AceDL\AceDL.exe</entry>
</rule>
</emulator>
<emulator name="ADVANCEMAME">
<!-- Arcade emulator AdvanceMAME -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\AdvanceMAME\advmame.exe</entry>
<entry>%ESPATH%\..\Emulators\AdvanceMAME\advmame.exe</entry>
</rule>
</emulator>
<emulator name="ALTIRRA">
<!-- Atari 8-bit computer emulator Altirra -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Altirra\Altirra64.exe</entry>
<entry>%ESPATH%\Emulators\Altirra\Altirra.exe</entry>
<entry>%ESPATH%\..\Emulators\Altirra\Altirra64.exe</entry>
<entry>%ESPATH%\..\Emulators\Altirra\Altirra.exe</entry>
</rule>
</emulator>
<emulator name="APPLEWIN">
<!-- Apple II emulator AppleWin -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\AppleWin\AppleWin.exe</entry>
<entry>%ESPATH%\..\Emulators\AppleWin\AppleWin.exe</entry>
</rule>
</emulator>
<emulator name="ARCADEFLASHWEB">
<!-- Adobe Flash player ArcadeFlashWeb -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ArcadeFlashWeb\ArcadeFlashWeb.exe</entry>
<entry>%ESPATH%\..\Emulators\ArcadeFlashWeb\ArcadeFlashWeb.exe</entry>
</rule>
</emulator>
<emulator name="ARES">
<!-- Multi-system emulator ares -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ares\ares.exe</entry>
<entry>%ESPATH%\..\Emulators\ares\ares.exe</entry>
</rule>
</emulator>
<emulator name="ATARI800">
<!-- Atari 8-bit computer emulator Atari800 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\atari800\atari800.exe</entry>
<entry>%ESPATH%\..\Emulators\atari800\atari800.exe</entry>
</rule>
</emulator>
<emulator name="BASILISKII">
<!-- Macintosh 68k emulator Basilisk II -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\BasiliskII\BasiliskII.exe</entry>
<entry>%ESPATH%\..\Emulators\BasiliskII\BasiliskII.exe</entry>
</rule>
</emulator>
<emulator name="BIGPEMU">
<!-- Atari Jaguar emulator BigPEmu -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\BigPEmu\BigPEmu.exe</entry>
<entry>%ESPATH%\..\Emulators\BigPEmu\BigPEmu.exe</entry>
</rule>
</emulator>
<emulator name="BSNES">
<!-- Super Nintendo/Super Famicom emulator bsnes -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\bsnes\bsnes.exe</entry>
<entry>%ESPATH%\..\Emulators\bsnes\bsnes.exe</entry>
</rule>
</emulator>
<emulator name="CEMU">
<!-- Nintendo Wii U emulator Cemu -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\cemu\Cemu.exe</entry>
<entry>%ESPATH%\..\Emulators\cemu\Cemu.exe</entry>
</rule>
</emulator>
<emulator name="CITRA">
<!-- Nintendo 3DS emulator Citra -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Citra\nightly-mingw\citra-qt.exe</entry>
<entry>%ESPATH%\Emulators\Citra\canary-mingw\citra-qt.exe</entry>
<entry>%ESPATH%\..\Emulators\Citra\nightly-mingw\citra-qt.exe</entry>
<entry>%ESPATH%\..\Emulators\Citra\canary-mingw\citra-qt.exe</entry>
</rule>
</emulator>
<emulator name="COLEM">
<!-- Coleco ColecoVision and Adam emulator ColEm -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ColEm\ColEm.exe</entry>
<entry>%ESPATH%\..\Emulators\ColEm\ColEm.exe</entry>
</rule>
</emulator>
<emulator name="CPCEMU">
<!-- Amstrad CPC emulator CPCemu -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\cpcemu\cpcemu.exe</entry>
<entry>%ESPATH%\..\Emulators\cpcemu\cpcemu.exe</entry>
</rule>
</emulator>
<emulator name="CSPECT">
<!-- Sinclair ZX Spectrum Next emulator #CSpect -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\CSpect\CSpect.exe</entry>
<entry>%ESPATH%\..\Emulators\CSpect\CSpect.exe</entry>
</rule>
</emulator>
<emulator name="CXBX-RELOADED">
<!-- Microsoft Xbox emulator Cxbx-Reloaded -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Cxbx-Reloaded\cxbx.exe</entry>
<entry>%ESPATH%\..\Emulators\Cxbx-Reloaded\cxbx.exe</entry>
</rule>
</emulator>
<emulator name="DEMUL">
<!-- Sega Dreamcast emulator Demul -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\demul\demul.exe</entry>
<entry>%ESPATH%\..\Emulators\demul\demul.exe</entry>
</rule>
</emulator>
<emulator name="DOLPHIN">
<!-- Nintendo GameCube and Wii emulator Dolphin -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Dolphin-x64\Dolphin.exe</entry>
<entry>%ESPATH%\..\Emulators\Dolphin-x64\Dolphin.exe</entry>
</rule>
</emulator>
<emulator name="DOSBOX-STAGING">
<!-- DOS emulator DOSBox Staging -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\dosbox-staging\dosbox.exe</entry>
<entry>%ESPATH%\..\Emulators\dosbox-staging\dosbox.exe</entry>
</rule>
</emulator>
<emulator name="DOSBOX-X">
<!-- DOS emulator DOSBox-X -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\DOSBox-X\dosbox-x.exe</entry>
<entry>%ESPATH%\..\Emulators\DOSBox-X\dosbox-x.exe</entry>
</rule>
</emulator>
<emulator name="DUCKSTATION">
<!-- Sony PlayStation 1 emulator DuckStation -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\duckstation\duckstation-nogui-x64-ReleaseLTCG.exe</entry>
<entry>%ESPATH%\Emulators\duckstation\duckstation-qt-x64-ReleaseLTCG.exe</entry>
<entry>%ESPATH%\..\Emulators\duckstation\duckstation-nogui-x64-ReleaseLTCG.exe</entry>
<entry>%ESPATH%\..\Emulators\duckstation\duckstation-qt-x64-ReleaseLTCG.exe</entry>
</rule>
</emulator>
<emulator name="EASYRPG">
<!-- EasyRPG game engine -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\EasyRPG\Player.exe</entry>
<entry>%ESPATH%\..\Emulators\EasyRPG\Player.exe</entry>
</rule>
</emulator>
<emulator name="EKA2L1">
<!-- Symbian and Nokia N-Gage emulator EKA2L1 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\EKA2L1\eka2l1_qt.exe</entry>
<entry>%ESPATH%\..\Emulators\EKA2L1\eka2l1_qt.exe</entry>
</rule>
</emulator>
<emulator name="FINALBURN-NEO">
<!-- Arcade emulator FinalBurn Neo -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\fbneo\fbneo64.exe</entry>
<entry>%ESPATH%\Emulators\fbneo\fbneo.exe</entry>
<entry>%ESPATH%\..\Emulators\fbneo\fbneo64.exe</entry>
<entry>%ESPATH%\..\Emulators\fbneo\fbneo.exe</entry>
</rule>
</emulator>
<emulator name="FLYCAST">
<!-- Sega Dreamcast emulator Flycast -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\flycast\flycast.exe</entry>
<entry>%ESPATH%\..\Emulators\flycast\flycast.exe</entry>
</rule>
</emulator>
<emulator name="FLYCAST-DOJO">
<!-- Sega Dreamcast emulator Flycast Dojo -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\flycast-dojo\flycast.exe</entry>
<entry>%ESPATH%\..\Emulators\flycast-dojo\flycast.exe</entry>
</rule>
</emulator>
<emulator name="FS-UAE">
<!-- Commodore Amiga emulator FS-UAE -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\FS-UAE-Launcher\Windows\x86-64\fs-uae-launcher.exe</entry>
<entry>%ESPATH%\..\Emulators\FS-UAE-Launcher\Windows\x86-64\fs-uae-launcher.exe</entry>
</rule>
</emulator>
<emulator name="FUSE">
<!-- Sinclair ZX Spectrum emulator Fuse -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Fuse\fuse.exe</entry>
<entry>%ESPATH%\..\Emulators\Fuse\fuse.exe</entry>
</rule>
</emulator>
<emulator name="FUTURE-PINBALL">
<!-- Pinball simulator Future Pinball -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Future Pinball\Future Pinball.exe</entry>
<entry>%ESPATH%\..\Emulators\Future Pinball\Future Pinball.exe</entry>
</rule>
</emulator>
<emulator name="GARGOYLE">
<!-- Interactive fiction player Gargoyle -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\gargoyle\gargoyle.exe</entry>
<entry>%ESPATH%\..\Emulators\gargoyle\gargoyle.exe</entry>
</rule>
</emulator>
<emulator name="GEARBOY">
<!-- Nintendo Game Boy and Game Boy Color emulator Gearboy -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Gearboy\Gearboy.exe</entry>
<entry>%ESPATH%\..\Emulators\Gearboy\Gearboy.exe</entry>
</rule>
</emulator>
<emulator name="GOPHER2600">
<!-- Atari 2600 emulator Gopher2600 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\gopher2600\gopher2600_windows_amd64.exe</entry>
<entry>%ESPATH%\..\Emulators\gopher2600\gopher2600_windows_amd64.exe</entry>
</rule>
</emulator>
<emulator name="HATARI">
<!-- Atari ST/STE/TT/Falcon emulator Hatari -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\hatari\hatari.exe</entry>
<entry>%ESPATH%\..\Emulators\hatari\hatari.exe</entry>
</rule>
</emulator>
<emulator name="HYPSEUS-SINGE">
<!-- Hypseus Singe, fork of arcade LaserDisc emulator Daphne -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Hypseus Singe\hypseus.exe</entry>
<entry>%ESPATH%\..\Emulators\Hypseus Singe\hypseus.exe</entry>
</rule>
</emulator>
<emulator name="KEMULATOR">
<!-- Java 2 Micro Edition emulator KEmulator -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\KEmulator\KEmulator.exe</entry>
<entry>%ESPATH%\..\Emulators\KEmulator\KEmulator.exe</entry>
</rule>
</emulator>
<emulator name="LIME3DS">
<!-- Nintendo 3DS emulator Lime3DS -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\lime3ds\lime3ds-gui.exe</entry>
<entry>%ESPATH%\..\Emulators\lime3ds\lime3ds-gui.exe</entry>
<entry>%ESPATH%\Emulators\lime-qt\lime-qt.exe</entry>
<entry>%ESPATH%\..\Emulators\lime-qt\lime-qt.exe</entry>
</rule>
</emulator>
<emulator name="M2EMULATOR">
<!-- Sega Model 2 Emulator -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\m2emulator\EMULATOR.EXE</entry>
<entry>%ESPATH%\..\Emulators\m2emulator\EMULATOR.EXE</entry>
</rule>
</emulator>
<emulator name="MAME">
<!-- Arcade emulator MAME -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\mame\mame.exe</entry>
<entry>%ESPATH%\..\Emulators\mame\mame.exe</entry>
</rule>
</emulator>
<emulator name="MEDNAFEN">
<!-- Multi-system emulator Mednafen -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\mednafen\mednafen.exe</entry>
<entry>%ESPATH%\..\Emulators\mednafen\mednafen.exe</entry>
</rule>
</emulator>
<emulator name="MELONDS">
<!-- Nintendo DS and DSi emulator melonDS -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\melonDS\melonDS.exe</entry>
<entry>%ESPATH%\..\Emulators\melonDS\melonDS.exe</entry>
</rule>
</emulator>
<emulator name="MESEN">
<!-- Multi-system emulator Mesen -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Mesen\Mesen.exe</entry>
<entry>%ESPATH%\..\Emulators\Mesen\Mesen.exe</entry>
</rule>
</emulator>
<emulator name="MGBA">
<!-- Nintendo Game Boy Advance emulator mGBA -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\mGBA\mGBA.exe</entry>
<entry>%ESPATH%\..\Emulators\mGBA\mGBA.exe</entry>
</rule>
</emulator>
<emulator name="MUPEN64PLUS">
<!-- Nintendo 64 emulator Mupen64Plus -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\mupen64plus\mupen64plus-ui-console.exe</entry>
<entry>%ESPATH%\..\Emulators\mupen64plus\mupen64plus-ui-console.exe</entry>
</rule>
</emulator>
<emulator name="OPENMSX">
<!-- MSX home computer emulator openMSX -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\openMSX\openmsx.exe</entry>
<entry>%ESPATH%\..\Emulators\openMSX\openmsx.exe</entry>
</rule>
</emulator>
<emulator name="ORICUTRON">
<!-- Tangerine Computer Systems emulator Oricutron -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Oricutron\oricutron.exe</entry>
<entry>%ESPATH%\..\Emulators\Oricutron\oricutron.exe</entry>
</rule>
</emulator>
<emulator name="PANDA3DS">
<!-- Nintendo 3DS emulator Panda3DS -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Panda3DS\Alber.exe</entry>
<entry>%ESPATH%\..\Emulators\Panda3DS\Alber.exe</entry>
</rule>
</emulator>
<emulator name="PCSX2">
<!-- Sony PlayStation 2 emulator PCSX2 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\PCSX2-Qt\pcsx2-qt*.exe</entry>
<entry>%ESPATH%\..\Emulators\PCSX2-Qt\pcsx2-qt*.exe</entry>
</rule>
</emulator>
<emulator name="PCSX2-LEGACY">
<!-- Sony PlayStation 2 emulator PCSX2 (legacy) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\PCSX2\pcsx2.exe</entry>
<entry>%ESPATH%\..\Emulators\PCSX2\pcsx2.exe</entry>
</rule>
</emulator>
<emulator name="PICO-8">
<!-- PICO-8 Fantasy Console (game engine) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\PICO-8\pico8.exe</entry>
<entry>%ESPATH%\..\Emulators\PICO-8\pico8.exe</entry>
</rule>
</emulator>
<emulator name="PLAY!">
<!-- Sony PlayStation 2 emulator Play! -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Play\Play.exe</entry>
<entry>%ESPATH%\..\Emulators\Play\Play.exe</entry>
</rule>
</emulator>
<emulator name="PPSSPP">
<!-- Sony PlayStation Portable emulator PPSSPP -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\PPSSPP\PPSSPPWindows64.exe</entry>
<entry>%ESPATH%\..\Emulators\PPSSPP\PPSSPPWindows64.exe</entry>
</rule>
</emulator>
<emulator name="PRBOOM-PLUS">
<!-- Doom engine source port PrBoom+ -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\prboom-plus\prboom-plus.exe</entry>
<entry>%ESPATH%\..\Emulators\prboom-plus\prboom-plus.exe</entry>
</rule>
</emulator>
<emulator name="PRIMEHACK">
<!-- PrimeHack, fork of Nintendo GameCube and Wii emulator Dolphin -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\PrimeHack\Dolphin.exe</entry>
<entry>%ESPATH%\..\Emulators\PrimeHack\Dolphin.exe</entry>
</rule>
</emulator>
<emulator name="PROJECT64">
<!-- Nintendo 64 emulator Project64 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Project64\Project64.exe</entry>
<entry>%ESPATH%\..\Emulators\Project64\Project64.exe</entry>
</rule>
</emulator>
<emulator name="PUNES">
<!-- Nintendo NES and Famicom emulator puNES -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\punes\punes64.exe</entry>
<entry>%ESPATH%\..\Emulators\punes\punes64.exe</entry>
</rule>
</emulator>
<emulator name="QUASI88">
<!-- NEC PC-8800 series emulator QUASI88 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\quasi88\QUASI88.exe</entry>
<entry>%ESPATH%\..\Emulators\quasi88\QUASI88.exe</entry>
</rule>
</emulator>
<emulator name="REDREAM">
<!-- Sega Dreamcast emulator Redream -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\redream\redream.exe</entry>
<entry>%ESPATH%\..\Emulators\redream\redream.exe</entry>
</rule>
</emulator>
<emulator name="ROSALIES-MUPEN-GUI">
<!-- Nintendo 64 emulator Rosalie's Mupen GUI -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\RMG\RMG.exe</entry>
<entry>%ESPATH%\..\Emulators\RMG\RMG.exe</entry>
</rule>
</emulator>
<emulator name="RPCS3">
<!-- Sony PlayStation 3 emulator RPCS3 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\RPCS3\rpcs3.exe</entry>
<entry>%ESPATH%\..\Emulators\RPCS3\rpcs3.exe</entry>
</rule>
</emulator>
<emulator name="RUFFLE">
<!-- Adobe Flash player Ruffle -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ruffle\ruffle.exe</entry>
<entry>%ESPATH%\..\Emulators\ruffle\ruffle.exe</entry>
</rule>
</emulator>
<emulator name="RYUJINX">
<!-- Nintendo Switch emulator Ryujinx -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ryujinx\Ryujinx.exe</entry>
<entry>%ESPATH%\Emulators\ryujinx\Ryujinx.Ava.exe</entry>
<entry>%ESPATH%\..\Emulators\ryujinx\Ryujinx.exe</entry>
<entry>%ESPATH%\..\Emulators\ryujinx\Ryujinx.Ava.exe</entry>
</rule>
</emulator>
<emulator name="SAMEBOY">
<!-- Nintendo Game Boy and Game Boy Color emulator SameBoy -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\sameboy\sameboy.exe</entry>
<entry>%ESPATH%\..\Emulators\sameboy\sameboy.exe</entry>
</rule>
</emulator>
<emulator name="SCUMMVM">
<!-- ScummVM game engine -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\scummvm\scummvm.exe</entry>
<entry>%ESPATH%\..\Emulators\scummvm\scummvm.exe</entry>
</rule>
</emulator>
<emulator name="SDL2TRS">
<!-- Tandy TRS-80 emulator sdl2trs -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\sdl2trs\sdl2trs64.exe</entry>
<entry>%ESPATH%\..\Emulators\sdl2trs\sdl2trs64.exe</entry>
</rule>
</emulator>
<emulator name="SHEEPSHAVER">
<!-- Apple Macintosh PowerPC emulator SheepShaver -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\SheepShaver\SheepShaver.exe</entry>
<entry>%ESPATH%\..\Emulators\SheepShaver\SheepShaver.exe</entry>
</rule>
</emulator>
<emulator name="SIMCOUPE">
<!-- SAM Coupé emulator SimCoupé -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\SimCoupe\SimCoupe.exe</entry>
<entry>%ESPATH%\..\Emulators\SimCoupe\SimCoupe.exe</entry>
</rule>
</emulator>
<emulator name="SIMPLE64">
<!-- Nintendo 64 emulator simple64 -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\simple64\simple64-gui.exe</entry>
<entry>%ESPATH%\..\Emulators\simple64\simple64-gui.exe</entry>
</rule>
</emulator>
<emulator name="SKYEMU">
<!-- Nintendo Game Boy, Game Boy Color, Game Boy Advance and DS emulator SkyEmu -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\SkyEmu\SkyEmu.exe</entry>
<entry>%ESPATH%\..\Emulators\SkyEmu\SkyEmu.exe</entry>
</rule>
</emulator>
<emulator name="SNES9X">
<!-- Super Nintendo emulator Snes9x -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\snes9x\snes9x-x64.exe</entry>
<entry>%ESPATH%\..\Emulators\snes9x\snes9x-x64.exe</entry>
</rule>
</emulator>
<emulator name="SOLARUS">
<!-- Solarus game engine -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\solarus\solarus-run.exe</entry>
<entry>%ESPATH%\..\Emulators\solarus\solarus-run.exe</entry>
</rule>
</emulator>
<emulator name="SSF">
<!-- Sega Saturn emulator SSF -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\SSF\SSF.exe</entry>
<entry>%ESPATH%\..\Emulators\SSF\SSF.exe</entry>
</rule>
</emulator>
<emulator name="STEAM">
<!-- Valve Steam -->
<rule type="winregistryvalue">
<entry>SOFTWARE\Valve\Steam\SteamExe</entry>
</rule>
<rule type="systempath">
<entry>steam.exe</entry>
</rule>
<rule type="staticpath">
<entry>C:\Program Files (x86)\Steam\steam.exe</entry>
<entry>D:\Program Files (x86)\Steam\steam.exe</entry>
</rule>
</emulator>
<emulator name="STELLA">
<!-- Atari 2600 emulator Stella -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Stella\64-bit\Stella.exe</entry>
<entry>%ESPATH%\..\Emulators\Stella\64-bit\Stella.exe</entry>
</rule>
</emulator>
<emulator name="SUPERMODEL">
<!-- Sega Model 3 emulator Supermodel -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Supermodel\Supermodel.exe</entry>
<entry>%ESPATH%\..\Emulators\Supermodel\Supermodel.exe</entry>
</rule>
</emulator>
<emulator name="TIC-80">
<!-- TIC-80 Fantasy Computer (game engine) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\tic80\tic80.exe</entry>
<entry>%ESPATH%\..\Emulators\tic80\tic80.exe</entry>
</rule>
</emulator>
<emulator name="TRIFORCE">
<!-- Triforce, fork of Nintendo GameCube and Wii emulator Dolphin -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Triforce\DolphinWX.exe</entry>
<entry>%ESPATH%\..\Emulators\Triforce\DolphinWX.exe</entry>
</rule>
</emulator>
<emulator name="TSUGARU">
<!-- Fujitsu FM Towns emulator Tsugaru -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\tsugaru\Tsugaru_CUI.exe</entry>
<entry>%ESPATH%\..\Emulators\tsugaru\Tsugaru_CUI.exe</entry>
</rule>
</emulator>
<emulator name="VBA-M">
<!-- Nintendo Game Boy Advance emulator VBA-M -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\VBA-M\visualboyadvance-m.exe</entry>
<entry>%ESPATH%\..\Emulators\VBA-M\visualboyadvance-m.exe</entry>
</rule>
</emulator>
<emulator name="VICE-X64SC">
<!-- Commodore 8-bit computer emulator VICE (x64sc accurate) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\VICE\x64sc.exe</entry>
<entry>%ESPATH%\Emulators\VICE\bin\x64sc.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\x64sc.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\bin\x64sc.exe</entry>
</rule>
</emulator>
<emulator name="VICE-XPLUS4">
<!-- Commodore 8-bit computer emulator VICE (xplus4) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\VICE\xplus4.exe</entry>
<entry>%ESPATH%\Emulators\VICE\bin\xplus4.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\xplus4.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\bin\xplus4.exe</entry>
</rule>
</emulator>
<emulator name="VICE-XVIC">
<!-- Commodore 8-bit computer emulator VICE (xvic) -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\VICE\xvic.exe</entry>
<entry>%ESPATH%\Emulators\VICE\bin\xvic.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\xvic.exe</entry>
<entry>%ESPATH%\..\Emulators\VICE\bin\xvic.exe</entry>
</rule>
</emulator>
<emulator name="VISUAL-PINBALL">
<!-- Pinball simulator Visual Pinball -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\VPinballX\VPinballX_GL64.exe</entry>
<entry>%ESPATH%\..\Emulators\VPinballX\VPinballX_GL64.exe</entry>
<entry>%ESPATH%\Emulators\VPinballX\VPinballX64.exe</entry>
<entry>%ESPATH%\..\Emulators\VPinballX\VPinballX64.exe</entry>
<entry>%ESPATH%\Emulators\Visual Pinball\VPinballX.exe</entry>
<entry>%ESPATH%\..\Emulators\Visual Pinball\VPinballX.exe</entry>
</rule>
</emulator>
<emulator name="VITA3K">
<!-- Sony PlayStation Vita emulator Vita3K -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\Vita3K\Vita3K.exe</entry>
<entry>%ESPATH%\..\Emulators\Vita3K\Vita3K.exe</entry>
</rule>
</emulator>
<emulator name="WINARCADIA">
<!-- Emerson Arcadia 2001 emulator WinArcadia -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\WinArcadia\WinArcadia.exe</entry>
<entry>%ESPATH%\..\Emulators\WinArcadia\WinArcadia.exe</entry>
</rule>
</emulator>
<emulator name="XEMU">
<!-- Microsoft Xbox emulator xemu -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\xemu\xemu.exe</entry>
<entry>%ESPATH%\..\Emulators\xemu\xemu.exe</entry>
</rule>
</emulator>
<emulator name="XENIA">
<!-- Microsoft Xbox 360 emulator xenia -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\xenia\xenia.exe</entry>
<entry>%ESPATH%\..\Emulators\xenia\xenia.exe</entry>
<entry>%ESPATH%\Emulators\xenia_canary\xenia_canary.exe</entry>
<entry>%ESPATH%\..\Emulators\xenia_canary\xenia_canary.exe</entry>
</rule>
</emulator>
<emulator name="XM6PRO68K">
<!-- Sharp X68000 emulator XM6 Pro-68k -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\XM6 Pro-68k\XM6.exe</entry>
<entry>%ESPATH%\..\Emulators\XM6 Pro-68k\XM6.exe</entry>
</rule>
</emulator>
<emulator name="XROAR">
<!-- Dragon and Tandy 8-bit computer emulator XRoar -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\xroar\xroar.exe</entry>
<entry>%ESPATH%\..\Emulators\xroar\xroar.exe</entry>
</rule>
</emulator>
<emulator name="ZESARUX">
<!-- Sinclair ZX Spectrum emulator ZEsarUX -->
<rule type="staticpath">
<entry>%ESPATH%\Emulators\ZEsarUX\zesarux.exe</entry>
<entry>%ESPATH%\..\Emulators\ZEsarUX\zesarux.exe</entry>
</rule>
</emulator>
</ruleList>

View file

@ -0,0 +1,35 @@
/*
* This file is part of FFmpeg.
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef SWSCALE_VERSION_MAJOR_H
#define SWSCALE_VERSION_MAJOR_H
/**
* @file
* swscale version macros
*/
#define LIBSWSCALE_VERSION_MAJOR 6
/**
* FF_API_* defines may be placed below to indicate public API that will be
* dropped at a future version bump. The defines themselves are not part of
* the public API and may change, break or disappear at any time.
*/
#endif /* SWSCALE_VERSION_MAJOR_H */

View file

@ -0,0 +1,247 @@
//========================================================================
//
// annot_stamp_expired.h
//
// Copyright (C) 2021 Mahmoud Ahmed Khalil <mahmoudkhalil11@gmail.com>
// Copyright (C) 2021 Albert Astals Cid <aacid@kde.org>
//
// Mechanically extracted from an SVG created for Okular by Eugene Trounev eugene.trounev@gmail.com
//
// Licensed under GPLv2 or later
//
//========================================================================
#ifndef ANNOT_STAMP_EXPIRED_H
#define ANNOT_STAMP_EXPIRED_H
#include "PDFDoc.h"
#include "Dict.h"
#include "Object.h"
static const double ANNOT_STAMP_EXPIRED_WIDTH = 106.758179;
static const double ANNOT_STAMP_EXPIRED_HEIGHT = 26.484743;
static const char *ANNOT_STAMP_EXPIRED = "1 0 0 -1 0 26.484741 cm\n"
"q\n"
"1 1 1 rg /a0 gs\n"
"3.406 2.129 m 103.367 2.129 l 104.07 2.129 104.637 2.695 104.637 3.398 \n"
"c 104.637 23.09 l 104.637 23.793 104.07 24.359 103.367 24.359 c 3.406 24.355\n"
" l 2.703 24.355 2.137 23.789 2.137 23.086 c 2.137 3.395 l 2.137 2.691 2.703\n"
" 2.125 3.406 2.125 c h\n"
"3.406 2.129 m f\n"
"Q q\n"
"0.74902 0 0 RG /a1 gs\n"
"3.454725 w\n"
"1 J\n"
"1 j\n"
"[] 0.0 d\n"
"4 M q 1 0 0 1 0 0 cm\n"
"3.406 2.129 m 103.367 2.129 l 104.07 2.129 104.637 2.695 104.637 3.398 \n"
"c 104.637 23.09 l 104.637 23.793 104.07 24.359 103.367 24.359 c 3.406 24.355\n"
" l 2.703 24.355 2.137 23.789 2.137 23.086 c 2.137 3.395 l 2.137 2.691 2.703\n"
" 2.125 3.406 2.125 c h\n"
"3.406 2.129 m S Q\n"
"0.74902 0 0 rg 14.82 20.828 m 14.82 5.434 l 26.926 5.434 l 26.926 7.926 l 18.043 7.926\n"
" l 18.043 11.793 l 26.262 11.793 l 26.262 14.285 l 18.043 14.285 l 18.043\n"
" 18.34 l 27.375 18.34 l 27.375 20.832 l 14.82 20.828 l 37.219 20.828 m 34.465\n"
" 16.543 l 31.688 20.828 l 28.422 20.828 l 32.75 14.719 l 28.629 9.004 l \n"
"31.941 9.004 l 34.465 12.871 l 36.977 9.004 l 40.309 9.004 l 36.188 14.688\n"
" l 40.547 20.828 l 37.215 20.828 l 53.473 14.863 m 53.473 15.758 53.383 \n"
"16.586 53.199 17.344 c 53.023 18.102 52.75 18.754 52.379 19.301 c 52.008\n"
" 19.848 51.535 20.277 50.957 20.59 c 50.391 20.895 49.715 21.047 48.938 \n"
"21.047 c 48.586 21.047 48.238 21.012 47.887 20.938 c 47.543 20.863 47.215\n"
" 20.75 46.902 20.586 c 46.59 20.418 46.297 20.203 46.027 19.941 c 45.766\n"
" 19.672 45.539 19.34 45.352 18.945 c 45.285 18.945 l 45.293 18.98 45.301\n"
" 19.074 45.309 19.219 c 45.316 19.363 45.324 19.535 45.332 19.73 c 45.34\n"
" 19.918 45.344 20.125 45.344 20.344 c 45.352 20.555 45.355 20.75 45.355 \n"
"20.934 c 45.355 25.469 l 42.285 25.469 l 42.285 11.723 l 42.285 11.117 42.273\n"
" 10.578 42.254 10.105 c 42.238 9.633 42.223 9.266 42.199 9 c 45.184 9 l \n"
"45.199 9.051 45.211 9.148 45.227 9.297 c 45.25 9.441 45.262 9.609 45.27 \n"
"9.801 c 45.285 9.988 45.297 10.188 45.301 10.391 c 45.309 10.594 45.312 \n"
"10.773 45.312 10.926 c 45.355 10.926 l 45.727 10.145 46.238 9.59 46.887 \n"
"9.254 c 47.535 8.918 48.285 8.75 49.137 8.75 c 49.887 8.75 50.535 8.902 \n"
"51.082 9.207 c 51.629 9.512 52.078 9.934 52.426 10.473 c 52.781 11.012 53.047\n"
" 11.656 53.211 12.406 c 53.387 13.148 53.473 13.965 53.473 14.855 c 50.27\n"
" 14.855 m 50.27 13.508 50.066 12.512 49.656 11.863 c 49.25 11.207 48.641\n"
" 10.879 47.832 10.879 c 47.527 10.879 47.219 10.945 46.914 11.074 c 46.617\n"
" 11.199 46.348 11.418 46.105 11.73 c 45.871 12.035 45.68 12.453 45.527 12.977\n"
" c 45.383 13.492 45.309 14.148 45.309 14.945 c 45.309 15.719 45.383 16.363\n"
" 45.527 16.879 c 45.672 17.391 45.863 17.797 46.094 18.102 c 46.336 18.406\n"
" 46.605 18.625 46.902 18.758 c 47.199 18.883 47.504 18.945 47.809 18.945\n"
" c 48.203 18.945 48.551 18.867 48.859 18.715 c 49.164 18.555 49.422 18.312\n"
" 49.625 17.984 c 49.836 17.648 49.996 17.223 50.105 16.707 c 50.215 16.191\n"
" 50.27 15.574 50.27 14.859 c 55.969 6.875 m 55.969 4.613 l 59.039 4.613 \n"
"l 59.039 6.875 l 55.969 6.875 l 55.969 20.828 m 55.969 9.004 l 59.039 9.004\n"
" l 59.039 20.828 l 55.969 20.828 l 62.176 20.828 m 62.176 11.781 l 62.176\n"
" 11.527 62.172 11.258 62.164 10.973 c 62.164 10.688 62.156 10.418 62.141\n"
" 10.164 c 62.133 9.902 62.125 9.668 62.117 9.465 c 62.109 9.254 62.098 9.102\n"
" 62.086 9.008 c 65.016 9.008 l 65.031 9.094 65.043 9.25 65.059 9.465 c 65.074\n"
" 9.676 65.086 9.91 65.102 10.164 c 65.117 10.418 65.129 10.676 65.133 10.93\n"
" c 65.148 11.176 65.156 11.379 65.156 11.531 c 65.199 11.531 l 65.352 11.102\n"
" 65.504 10.719 65.656 10.383 c 65.809 10.039 65.988 9.754 66.191 9.52 c \n"
"66.402 9.277 66.652 9.098 66.945 8.973 c 67.238 8.84 67.598 8.777 68.027\n"
" 8.777 c 68.211 8.777 68.387 8.797 68.562 8.832 c 68.746 8.859 68.883 8.898\n"
" 68.977 8.941 c 68.977 11.508 l 68.781 11.465 68.578 11.426 68.375 11.398\n"
" c 68.18 11.363 67.941 11.344 67.664 11.344 c 66.898 11.344 66.301 11.652\n"
" 65.871 12.273 c 65.449 12.895 65.238 13.809 65.238 15.027 c 65.238 20.828\n"
" l 62.168 20.828 l 75.707 21.047 m 74.855 21.047 74.086 20.922 73.402 20.676\n"
" c 72.727 20.422 72.145 20.039 71.664 19.527 c 71.184 19.012 70.816 18.367\n"
" 70.559 17.594 c 70.305 16.812 70.176 15.902 70.176 14.863 c 70.176 13.734\n"
" 70.324 12.785 70.625 12.012 c 70.93 11.238 71.34 10.617 71.848 10.145 c\n"
" 72.363 9.664 72.957 9.316 73.629 9.105 c 74.301 8.895 75.004 8.789 75.75\n"
" 8.789 c 76.684 8.789 77.477 8.953 78.133 9.281 c 78.797 9.602 79.34 10.055\n"
" 79.762 10.637 c 80.184 11.219 80.492 11.918 80.691 12.734 c 80.887 13.543\n"
" 80.988 14.438 80.988 15.422 c 80.988 15.508 l 73.41 15.508 l 73.41 16.004\n"
" 73.453 16.465 73.543 16.895 c 73.629 17.316 73.773 17.684 73.969 18 c 74.164\n"
" 18.305 74.422 18.551 74.734 18.73 c 75.047 18.906 75.426 18.992 75.871 \n"
"18.992 c 76.41 18.992 76.852 18.879 77.191 18.652 c 77.535 18.418 77.777\n"
" 18.062 77.922 17.582 c 80.816 17.832 l 80.684 18.168 80.5 18.523 80.258\n"
" 18.902 c 80.023 19.281 79.711 19.629 79.316 19.953 c 78.922 20.266 78.43\n"
" 20.527 77.84 20.738 c 77.258 20.941 76.547 21.043 75.711 21.043 c 75.711\n"
" 10.719 m 75.398 10.719 75.102 10.773 74.824 10.883 c 74.555 10.984 74.316\n"
" 11.152 74.113 11.387 c 73.918 11.613 73.758 11.906 73.633 12.273 c 73.508\n"
" 12.637 73.441 13.074 73.426 13.586 c 78.016 13.586 l 77.957 12.633 77.727\n"
" 11.918 77.328 11.445 c 76.926 10.965 76.387 10.723 75.711 10.723 c 90.988\n"
" 20.828 m 90.973 20.77 90.957 20.668 90.934 20.523 c 90.918 20.371 90.902\n"
" 20.199 90.879 20.012 c 90.863 19.824 90.852 19.629 90.836 19.434 c 90.828\n"
" 19.238 90.824 19.062 90.824 18.91 c 90.781 18.91 l 90.426 19.676 89.926\n"
" 20.227 89.285 20.559 c 88.652 20.887 87.891 21.051 87 21.051 c 86.258 21.051\n"
" 85.613 20.898 85.066 20.594 c 84.527 20.289 84.078 19.863 83.723 19.316\n"
" c 83.371 18.77 83.109 18.125 82.938 17.383 c 82.77 16.633 82.688 15.816\n"
" 82.688 14.934 c 82.688 14.039 82.773 13.215 82.949 12.465 c 83.133 11.715\n"
" 83.406 11.07 83.781 10.531 c 84.152 9.984 84.621 9.559 85.191 9.254 c 85.766\n"
" 8.949 86.449 8.797 87.234 8.797 c 87.621 8.797 87.992 8.836 88.348 8.918\n"
" c 88.703 9 89.035 9.121 89.344 9.289 c 89.648 9.457 89.926 9.672 90.176\n"
" 9.934 c 90.422 10.195 90.633 10.512 90.809 10.883 c 90.832 10.883 l 90.832\n"
" 10.809 90.828 10.703 90.82 10.566 c 90.82 10.422 90.82 10.258 90.82 10.074\n"
" c 90.82 9.891 90.816 9.703 90.809 9.508 c 90.809 9.312 90.809 9.121 90.809\n"
" 8.941 c 90.809 4.625 l 93.879 4.625 l 93.879 18.262 l 93.879 18.836 93.891\n"
" 19.352 93.91 19.801 c 93.934 20.246 93.949 20.59 93.965 20.84 c 90.992 \n"
"20.84 l 90.852 14.863 m 90.852 14.082 90.777 13.438 90.633 12.93 c 90.488\n"
" 12.414 90.293 12.004 90.055 11.707 c 89.82 11.402 89.551 11.191 89.246 \n"
"11.074 c 88.949 10.949 88.641 10.887 88.328 10.887 c 87.934 10.887 87.586\n"
" 10.965 87.277 11.117 c 86.98 11.27 86.723 11.512 86.512 11.84 c 86.309 \n"
"12.168 86.152 12.586 86.043 13.098 c 85.941 13.609 85.891 14.223 85.891 \n"
"14.945 c 85.891 17.625 86.695 18.965 88.305 18.965 c 88.609 18.965 88.918\n"
" 18.898 89.223 18.77 c 89.527 18.637 89.801 18.418 90.043 18.102 c 90.285\n"
" 17.789 90.477 17.371 90.621 16.844 c 90.773 16.312 90.852 15.652 90.852\n"
" 14.867 c f\n"
"1 1 1 RG 0.531496 w\n"
"0 J\n"
"0 j\n"
"q 1 0 0 1 0 0 cm\n"
"14.82 20.828 m 14.82 5.434 l 26.926 5.434 l 26.926 7.926 l 18.043 7.926\n"
" l 18.043 11.793 l 26.262 11.793 l 26.262 14.285 l 18.043 14.285 l 18.043\n"
" 18.34 l 27.375 18.34 l 27.375 20.832 l 14.82 20.828 l 37.219 20.828 m 34.465\n"
" 16.543 l 31.688 20.828 l 28.422 20.828 l 32.75 14.719 l 28.629 9.004 l \n"
"31.941 9.004 l 34.465 12.871 l 36.977 9.004 l 40.309 9.004 l 36.188 14.688\n"
" l 40.547 20.828 l 37.215 20.828 l 53.473 14.863 m 53.473 15.758 53.383 \n"
"16.586 53.199 17.344 c 53.023 18.102 52.75 18.754 52.379 19.301 c 52.008\n"
" 19.848 51.535 20.277 50.957 20.59 c 50.391 20.895 49.715 21.047 48.938 \n"
"21.047 c 48.586 21.047 48.238 21.012 47.887 20.938 c 47.543 20.863 47.215\n"
" 20.75 46.902 20.586 c 46.59 20.418 46.297 20.203 46.027 19.941 c 45.766\n"
" 19.672 45.539 19.34 45.352 18.945 c 45.285 18.945 l 45.293 18.98 45.301\n"
" 19.074 45.309 19.219 c 45.316 19.363 45.324 19.535 45.332 19.73 c 45.34\n"
" 19.918 45.344 20.125 45.344 20.344 c 45.352 20.555 45.355 20.75 45.355 \n"
"20.934 c 45.355 25.469 l 42.285 25.469 l 42.285 11.723 l 42.285 11.117 42.273\n"
" 10.578 42.254 10.105 c 42.238 9.633 42.223 9.266 42.199 9 c 45.184 9 l \n"
"45.199 9.051 45.211 9.148 45.227 9.297 c 45.25 9.441 45.262 9.609 45.27 \n"
"9.801 c 45.285 9.988 45.297 10.188 45.301 10.391 c 45.309 10.594 45.312 \n"
"10.773 45.312 10.926 c 45.355 10.926 l 45.727 10.145 46.238 9.59 46.887 \n"
"9.254 c 47.535 8.918 48.285 8.75 49.137 8.75 c 49.887 8.75 50.535 8.902 \n"
"51.082 9.207 c 51.629 9.512 52.078 9.934 52.426 10.473 c 52.781 11.012 53.047\n"
" 11.656 53.211 12.406 c 53.387 13.148 53.473 13.965 53.473 14.855 c 50.27\n"
" 14.855 m 50.27 13.508 50.066 12.512 49.656 11.863 c 49.25 11.207 48.641\n"
" 10.879 47.832 10.879 c 47.527 10.879 47.219 10.945 46.914 11.074 c 46.617\n"
" 11.199 46.348 11.418 46.105 11.73 c 45.871 12.035 45.68 12.453 45.527 12.977\n"
" c 45.383 13.492 45.309 14.148 45.309 14.945 c 45.309 15.719 45.383 16.363\n"
" 45.527 16.879 c 45.672 17.391 45.863 17.797 46.094 18.102 c 46.336 18.406\n"
" 46.605 18.625 46.902 18.758 c 47.199 18.883 47.504 18.945 47.809 18.945\n"
" c 48.203 18.945 48.551 18.867 48.859 18.715 c 49.164 18.555 49.422 18.312\n"
" 49.625 17.984 c 49.836 17.648 49.996 17.223 50.105 16.707 c 50.215 16.191\n"
" 50.27 15.574 50.27 14.859 c 55.969 6.875 m 55.969 4.613 l 59.039 4.613 \n"
"l 59.039 6.875 l 55.969 6.875 l 55.969 20.828 m 55.969 9.004 l 59.039 9.004\n"
" l 59.039 20.828 l 55.969 20.828 l 62.176 20.828 m 62.176 11.781 l 62.176\n"
" 11.527 62.172 11.258 62.164 10.973 c 62.164 10.688 62.156 10.418 62.141\n"
" 10.164 c 62.133 9.902 62.125 9.668 62.117 9.465 c 62.109 9.254 62.098 9.102\n"
" 62.086 9.008 c 65.016 9.008 l 65.031 9.094 65.043 9.25 65.059 9.465 c 65.074\n"
" 9.676 65.086 9.91 65.102 10.164 c 65.117 10.418 65.129 10.676 65.133 10.93\n"
" c 65.148 11.176 65.156 11.379 65.156 11.531 c 65.199 11.531 l 65.352 11.102\n"
" 65.504 10.719 65.656 10.383 c 65.809 10.039 65.988 9.754 66.191 9.52 c \n"
"66.402 9.277 66.652 9.098 66.945 8.973 c 67.238 8.84 67.598 8.777 68.027\n"
" 8.777 c 68.211 8.777 68.387 8.797 68.562 8.832 c 68.746 8.859 68.883 8.898\n"
" 68.977 8.941 c 68.977 11.508 l 68.781 11.465 68.578 11.426 68.375 11.398\n"
" c 68.18 11.363 67.941 11.344 67.664 11.344 c 66.898 11.344 66.301 11.652\n"
" 65.871 12.273 c 65.449 12.895 65.238 13.809 65.238 15.027 c 65.238 20.828\n"
" l 62.168 20.828 l 75.707 21.047 m 74.855 21.047 74.086 20.922 73.402 20.676\n"
" c 72.727 20.422 72.145 20.039 71.664 19.527 c 71.184 19.012 70.816 18.367\n"
" 70.559 17.594 c 70.305 16.812 70.176 15.902 70.176 14.863 c 70.176 13.734\n"
" 70.324 12.785 70.625 12.012 c 70.93 11.238 71.34 10.617 71.848 10.145 c\n"
" 72.363 9.664 72.957 9.316 73.629 9.105 c 74.301 8.895 75.004 8.789 75.75\n"
" 8.789 c 76.684 8.789 77.477 8.953 78.133 9.281 c 78.797 9.602 79.34 10.055\n"
" 79.762 10.637 c 80.184 11.219 80.492 11.918 80.691 12.734 c 80.887 13.543\n"
" 80.988 14.438 80.988 15.422 c 80.988 15.508 l 73.41 15.508 l 73.41 16.004\n"
" 73.453 16.465 73.543 16.895 c 73.629 17.316 73.773 17.684 73.969 18 c 74.164\n"
" 18.305 74.422 18.551 74.734 18.73 c 75.047 18.906 75.426 18.992 75.871 \n"
"18.992 c 76.41 18.992 76.852 18.879 77.191 18.652 c 77.535 18.418 77.777\n"
" 18.062 77.922 17.582 c 80.816 17.832 l 80.684 18.168 80.5 18.523 80.258\n"
" 18.902 c 80.023 19.281 79.711 19.629 79.316 19.953 c 78.922 20.266 78.43\n"
" 20.527 77.84 20.738 c 77.258 20.941 76.547 21.043 75.711 21.043 c 75.711\n"
" 10.719 m 75.398 10.719 75.102 10.773 74.824 10.883 c 74.555 10.984 74.316\n"
" 11.152 74.113 11.387 c 73.918 11.613 73.758 11.906 73.633 12.273 c 73.508\n"
" 12.637 73.441 13.074 73.426 13.586 c 78.016 13.586 l 77.957 12.633 77.727\n"
" 11.918 77.328 11.445 c 76.926 10.965 76.387 10.723 75.711 10.723 c 90.988\n"
" 20.828 m 90.973 20.77 90.957 20.668 90.934 20.523 c 90.918 20.371 90.902\n"
" 20.199 90.879 20.012 c 90.863 19.824 90.852 19.629 90.836 19.434 c 90.828\n"
" 19.238 90.824 19.062 90.824 18.91 c 90.781 18.91 l 90.426 19.676 89.926\n"
" 20.227 89.285 20.559 c 88.652 20.887 87.891 21.051 87 21.051 c 86.258 21.051\n"
" 85.613 20.898 85.066 20.594 c 84.527 20.289 84.078 19.863 83.723 19.316\n"
" c 83.371 18.77 83.109 18.125 82.938 17.383 c 82.77 16.633 82.688 15.816\n"
" 82.688 14.934 c 82.688 14.039 82.773 13.215 82.949 12.465 c 83.133 11.715\n"
" 83.406 11.07 83.781 10.531 c 84.152 9.984 84.621 9.559 85.191 9.254 c 85.766\n"
" 8.949 86.449 8.797 87.234 8.797 c 87.621 8.797 87.992 8.836 88.348 8.918\n"
" c 88.703 9 89.035 9.121 89.344 9.289 c 89.648 9.457 89.926 9.672 90.176\n"
" 9.934 c 90.422 10.195 90.633 10.512 90.809 10.883 c 90.832 10.883 l 90.832\n"
" 10.809 90.828 10.703 90.82 10.566 c 90.82 10.422 90.82 10.258 90.82 10.074\n"
" c 90.82 9.891 90.816 9.703 90.809 9.508 c 90.809 9.312 90.809 9.121 90.809\n"
" 8.941 c 90.809 4.625 l 93.879 4.625 l 93.879 18.262 l 93.879 18.836 93.891\n"
" 19.352 93.91 19.801 c 93.934 20.246 93.949 20.59 93.965 20.84 c 90.992 \n"
"20.84 l 90.852 14.863 m 90.852 14.082 90.777 13.438 90.633 12.93 c 90.488\n"
" 12.414 90.293 12.004 90.055 11.707 c 89.82 11.402 89.551 11.191 89.246 \n"
"11.074 c 88.949 10.949 88.641 10.887 88.328 10.887 c 87.934 10.887 87.586\n"
" 10.965 87.277 11.117 c 86.98 11.27 86.723 11.512 86.512 11.84 c 86.309 \n"
"12.168 86.152 12.586 86.043 13.098 c 85.941 13.609 85.891 14.223 85.891 \n"
"14.945 c 85.891 17.625 86.695 18.965 88.305 18.965 c 88.609 18.965 88.918\n"
" 18.898 89.223 18.77 c 89.527 18.637 89.801 18.418 90.043 18.102 c 90.285\n"
" 17.789 90.477 17.371 90.621 16.844 c 90.773 16.312 90.852 15.652 90.852\n"
" 14.867 c S Q\n"
"0.74902 0 0 rg 1 1 1 RG 0.797243 w\n"
"1 J\n"
"1 j\n"
"q 1 0 0 1 0 0 cm\n"
"3.398 0.398 m 1.77 0.398 0.398 1.77 0.398 3.398 c 0.398 23.086 l 0.398 \n"
"24.715 1.77 26.086 3.398 26.086 c 103.359 26.086 l 104.988 26.086 106.359\n"
" 24.715 106.359 23.086 c 106.359 3.398 l 106.359 1.77 104.988 0.398 103.359\n"
" 0.398 c h\n"
"3.867 3.844 m 102.914 3.844 l 102.914 22.617 l 3.867 22.617 l h\n"
"3.867 3.844 m B Q\n"
"Q\n";
static Dict *getExpiredStampExtGStateDict(PDFDoc *doc)
{
Dict *a0Dict = new Dict(doc->getXRef());
a0Dict->add("CA", Object(0.588235));
a0Dict->add("ca", Object(0.588235));
Dict *a1Dict = new Dict(doc->getXRef());
a1Dict->add("CA", Object(1));
a1Dict->add("ca", Object(1));
Dict *extGStateDict = new Dict(doc->getXRef());
extGStateDict->add("a0", Object(a0Dict));
extGStateDict->add("a1", Object(a1Dict));
return extGStateDict;
}
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="169.5px" height="67.609px" viewBox="187.964 0 169.5 67.609" enable-background="new 187.964 0 169.5 67.609"
xml:space="preserve">
<rect x="192.703" y="4.104" width="161.302" height="60.594"/>
<rect x="194.132" y="5.432" fill="#1F0200" width="48.983" height="57.878"/>
<g>
<path fill="#F9F8E1" d="M265.563,28.495c0,5.628-4.411,8.442-13.232,8.442c-1.531,0-3.916-0.042-7.155-0.127
c0.176-4.271,0.265-9.086,0.265-14.446c0-5.147-0.088-9.538-0.265-13.173h3.293c0.624,0,1.67-0.021,3.14-0.063
s2.619-0.064,3.445-0.064c6.003,0,9.004,2.037,9.004,6.109c0,3.14-1.538,5.218-4.614,6.236v0.318
c1.639,0.269,3.069,0.937,4.289,2.004C264.953,24.801,265.563,26.388,265.563,28.495z M258.591,16.85
c0-2.531-1.518-3.797-4.553-3.797c-1.396,0-2.636,0.106-3.719,0.318c0.148,1.429,0.223,3.882,0.223,7.361
c0.515,0.028,1.057,0.042,1.626,0.042C256.45,20.773,258.591,19.466,258.591,16.85z M260.075,28.729
c0-2.814-2.364-4.222-7.094-4.222c-0.935,0-1.741,0.036-2.418,0.106c0,2.956,0.061,5.678,0.183,8.167
c0.46,0.114,1.151,0.17,2.073,0.17c2.507,0,4.343-0.314,5.508-0.944S260.075,30.284,260.075,28.729z"/>
<path fill="#F9F8E1" d="M290.442,28.495c0,5.628-4.411,8.442-13.232,8.442c-1.531,0-3.916-0.042-7.154-0.127
c0.176-4.271,0.264-9.086,0.264-14.446c0-5.147-0.088-9.538-0.264-13.173h3.292c0.623,0,1.67-0.021,3.14-0.063
c1.471-0.042,2.619-0.064,3.445-0.064c6.003,0,9.004,2.037,9.004,6.109c0,3.14-1.537,5.218-4.613,6.236v0.318
c1.64,0.269,3.069,0.937,4.289,2.004C289.832,24.801,290.442,26.388,290.442,28.495z M283.47,16.85
c0-2.531-1.518-3.797-4.553-3.797c-1.396,0-2.636,0.106-3.72,0.318c0.149,1.429,0.224,3.882,0.224,7.361
c0.515,0.028,1.057,0.042,1.626,0.042C281.329,20.773,283.47,19.466,283.47,16.85z M284.954,28.729
c0-2.814-2.365-4.222-7.093-4.222c-0.935,0-1.742,0.036-2.419,0.106c0,2.956,0.061,5.678,0.183,8.167
c0.46,0.114,1.151,0.17,2.073,0.17c2.507,0,4.343-0.314,5.508-0.944S284.954,30.284,284.954,28.729z"/>
<path fill="#F9F8E1" d="M313.877,31.783l-0.346,4.879c-1.925,0.48-3.821,0.721-5.691,0.721c-4.647,0-8.188-1.339-10.62-4.02
c-2.433-2.68-3.648-5.936-3.648-9.769c0-3.973,1.291-7.431,3.872-10.373c2.581-2.941,6.122-4.412,10.62-4.412
c1.653,0,3.219,0.198,4.695,0.594l-0.711,4.9c-1.6-0.538-3.131-0.806-4.594-0.806c-2.751,0-4.797,0.909-6.139,2.726
c-1.342,1.817-2.012,4.027-2.012,6.629c0,2.659,0.795,4.964,2.389,6.915c1.592,1.952,3.824,2.928,6.696,2.928
C310.07,32.695,311.899,32.392,313.877,31.783z"/>
</g>
<g>
<path fill="#F9F8E1" d="M250.922,50.963l-3.193-9.094c-0.018-0.041-0.054-0.081-0.126-0.081s-0.161,0.054-0.161,0.136v9.039h-1.489
v-9.962h2.745l2.798,7.736c0.036,0.081,0.09,0.122,0.162,0.122c0.108,0,0.198-0.055,0.215-0.136l2.727-7.723h2.781v9.962h-1.489
v-8.984c0-0.082-0.072-0.123-0.126-0.123c-0.072,0-0.144,0.027-0.179,0.096l-3.157,9.012H250.922z"/>
<path fill="#F9F8E1" d="M261.057,50.081h1.112V41.91h-1.112v-0.909h4.144v0.909h-1.166v8.171h1.166v0.882h-4.144V50.081z"/>
<path fill="#F9F8E1" d="M274.42,43.893c-0.144-0.965-0.753-1.833-2.188-1.833c-1.31,0-1.866,0.773-2.152,1.303
c-0.484,0.896-0.539,2.28-0.539,2.39c0,2.185,0.521,4.315,2.691,4.315c1.041,0,1.579-0.569,1.74-0.76
c0.358-0.462,0.43-1.032,0.466-1.357l1.794,0.244c-0.072,0.787-0.448,1.642-1.237,2.239c-1.13,0.855-2.422,0.855-2.924,0.855
c-1.077,0-4.323-0.421-4.323-5.212c0-2.294,0.771-5.198,4.484-5.198c0.843,0,1.938,0.189,2.745,0.814
c0.897,0.691,1.076,1.479,1.166,1.954L274.42,43.893z"/>
<path fill="#F9F8E1" d="M279.73,41.001h4.054c3.678,0,4.467,1.683,4.467,2.701c0,1.872-1.632,2.375-2.816,2.659l3.444,4.602h-2.152
l-3.122-4.424h-2.027v4.424h-1.848V41.001z M281.56,42.168v3.299c1.004,0.014,2.296,0.014,2.977-0.096
c0.719-0.122,1.848-0.407,1.848-1.52c0-1.168-1.039-1.684-3.013-1.684H281.56z"/>
<path fill="#F9F8E1" d="M298.959,43.268c0.395,0.882,0.502,2.049,0.502,2.742c0,2.375-0.879,5.252-4.431,5.252
c-3.229,0-4.449-2.457-4.449-5.117c0-1.52,0.324-2.904,1.077-3.813c1.095-1.33,2.403-1.479,3.372-1.479
C297.255,40.852,298.421,42.073,298.959,43.268z M295.067,42.046c-1.13,0-1.829,0.597-2.206,1.534
c-0.252,0.597-0.395,1.479-0.395,2.523c0,1.264,0.232,3.923,2.529,3.923c1.865,0,2.582-1.452,2.582-3.977
C297.578,44.733,297.417,42.046,295.067,42.046z"/>
</g>
<circle fill="#F9F8E1" cx="199.287" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="204.204" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="223.873" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="228.79" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="233.707" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="10.039" r="1.863"/>
<circle fill="#F9F8E1" cx="201.713" cy="12.854" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="12.854" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="12.854" r="1.863"/>
<circle fill="#F9F8E1" cx="236.133" cy="12.854" r="1.863"/>
<circle fill="#F9F8E1" cx="199.287" cy="15.584" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="15.584" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="15.584" r="1.863"/>
<circle fill="#F9F8E1" cx="228.79" cy="15.584" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="15.584" r="1.863"/>
<circle fill="#F9F8E1" cx="206.63" cy="18.4" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="18.4" r="1.863"/>
<circle fill="#F9F8E1" cx="226.299" cy="18.4" r="1.863"/>
<circle fill="#F9F8E1" cx="231.216" cy="18.4" r="1.863"/>
<circle fill="#F9F8E1" cx="199.287" cy="20.999" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="20.999" r="1.863"/>
<circle fill="#F9F8E1" cx="228.79" cy="20.999" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="20.999" r="1.863"/>
<circle fill="#F9F8E1" cx="201.713" cy="23.815" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="23.815" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="23.815" r="1.863"/>
<circle fill="#F9F8E1" cx="236.133" cy="23.815" r="1.863"/>
<circle fill="#F9F8E1" cx="199.287" cy="26.544" r="1.863"/>
<circle fill="#F9F8E1" cx="204.204" cy="26.544" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="26.544" r="1.863"/>
<circle fill="#F9F8E1" cx="233.707" cy="26.544" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="26.544" r="1.863"/>
<circle fill="#F9F8E1" cx="201.713" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="206.63" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="226.299" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="231.216" cy="29.36" r="1.863"/>
<circle fill="#F9F8E1" cx="199.287" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="204.204" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="32.22" r="1.863"/>
<circle fill="#F9F8E1" cx="201.713" cy="35.036" r="1.863"/>
<circle fill="#F9F8E1" cx="206.63" cy="35.036" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="35.036" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="35.036" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="35.036" r="1.863"/>
<circle fill="#F9F8E1" cx="204.204" cy="37.765" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="37.765" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="37.765" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="37.765" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="37.765" r="1.863"/>
<circle fill="#F9F8E1" cx="206.63" cy="40.581" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="40.581" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="40.581" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="40.581" r="1.863"/>
<circle fill="#F9F8E1" cx="209.121" cy="43.181" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="43.181" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="43.181" r="1.863"/>
<circle fill="#F9F8E1" cx="223.873" cy="43.181" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="43.181" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="45.996" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="45.996" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="45.996" r="1.863"/>
<circle fill="#F9F8E1" cx="226.299" cy="45.996" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="48.726" r="1.863"/>
<circle fill="#F9F8E1" cx="218.956" cy="48.726" r="1.863"/>
<circle fill="#F9F8E1" cx="223.873" cy="48.726" r="1.863"/>
<circle fill="#F9F8E1" cx="228.79" cy="48.726" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="48.726" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="51.541" r="1.863"/>
<circle fill="#F9F8E1" cx="226.299" cy="51.541" r="1.863"/>
<circle fill="#F9F8E1" cx="231.216" cy="51.541" r="1.863"/>
<circle fill="#F9F8E1" cx="214.039" cy="54.285" r="1.863"/>
<circle fill="#F9F8E1" cx="223.873" cy="54.285" r="1.863"/>
<circle fill="#F9F8E1" cx="233.707" cy="54.285" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="54.285" r="1.863"/>
<circle fill="#F9F8E1" cx="201.713" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="206.63" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="211.548" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="216.465" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="221.382" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="226.299" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="236.133" cy="57.102" r="1.863"/>
<circle fill="#F9F8E1" cx="238.624" cy="59.83" r="1.863"/>
</svg>

After

Width:  |  Height:  |  Size: 9.7 KiB

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 3839 555.6" style="enable-background:new 0 0 3839 555.6;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFF800;}
.st1{fill:#96E620;}
.st2{fill:#FFFFFF;}
</style>
<g>
<path class="st1" d="M352.1,252.3h284.1L621.2,330c-43.7,5.4-65.5,14-71,42.8l-34,177.4H413.7l-14-49.8
c-47.6,35.8-94.4,55.2-167,55.2C97.6,555.6,0,491.9,0,333.9C0,130.1,182.5,0,342.5,0c46.8,0,88.6,9.1,130.7,34l10.3-25.9h66.3
l18.9,174.8l-76.5,26.5c-8.6-53.7-60.4-118-134.6-118c-114,0-165.6,155.3-165.6,263.5c0,54.3,24.5,104.6,83,104.6
c49.2,0,101.6-38.7,106.6-93.7c1.7-18.6-5.5-32.7-44.5-35.8L352.1,252.3z"/>
<path class="st1" d="M2673.9,177.3l97.8-161.6h464.6l31.8,168.6l-77.4,27.4c-18.2-67.7-52.5-110.1-112.9-115.5L3022,387.6
c-4.1,21-9.4,41.6-9.4,50.1c0,25.7,21.1,26.9,61.6,31.5l-14.6,76.2h-323.1l14.6-76.2c48-2.3,76.5-17.1,81.5-45.1l62.9-328
c-51.1,10.6-105.4,28.4-157.5,107.7L2673.9,177.3z"/>
<path class="st1" d="M3203.8,545.5l14.1-76.2c48-2.3,65.8-17.1,71-45.1c11.7-63.6,48.6-254.1,48.6-254.1s8.2-46,8.2-49.4
c0-10.1-4.2-25.6-48.1-28.8l14.1-76.2h487.4l39.9,162c0,0-53.6,27-71.8,33.2c-28.1-71.6-84.9-111.9-159.7-111.9
c-60.4,0-71.1-2.9-79.4,43.8l-14.7,76.6c80.2-0.8,72.6-0.1,94.9-74h76.3L3638.9,385H3564c0.8-9.3,1.7-17.6,1.7-27
c0-45.9-3.8-48.7-69.1-50.3l-20.9,109.4c-1.7,7-1.3,15.6-1.3,23.3c0,21,32.3,21.1,47.3,21.1c85.4,0,166.6-39,238.2-129.3l64.8,33.1
l-123.6,180.1H3203.8z"/>
<path class="st1" d="M964.3,151.4l-82.5,141.3h109.5L964.3,151.4z M943.5,469.3c53.8,0,72.9-7.8,72.9-27.2c0-14-3.6-37.1-10.6-73.1
H837.3c-22.3,37.3-39.7,68.5-39.7,77.8c0,17.1,5.4,22.6,53.4,22.6l-14.6,76.2H602.6l14.6-76.2c52.1-5.4,69.6-9.3,117.5-88.7
L953.9,15.8h175.7l86.5,410.7c5.8,24.1,19.8,35.8,62.9,42.8l-14.5,76.2H928.9L943.5,469.3z"/>
<path class="st1" d="M2392.3,151.4l-82.5,141.3h109.5L2392.3,151.4z M2371.5,469.3c53.8,0,72.9-7.8,72.9-27.2
c0-14-3.6-37.1-10.6-73.1h-168.6c-22.3,37.3-39.7,68.5-39.7,77.8c0,17.1,5.4,22.6,53.4,22.6l-14.6,76.2h-233.8l14.6-76.2
c52.1-5.4,69.6-9.3,117.5-88.7l219.2-364.8h175.7l86.5,410.7c5.8,24.1,19.8,35.8,62.9,42.8l-14.5,76.2h-335.5L2371.5,469.3z"/>
<path class="st1" d="M1819,15.8l-115.2,222.8l-13.6-222.8h-287.4l-4.6,0l-14.7,76.6c33.8,6.9,45.7,13.9,45.7,30.8
c0,7-1.7,17.1-5.1,31.1l-49.5,258.3c-10.3,47.5-28.3,52.9-70.3,56.8l-14.6,76.2h210.2l14.6-76.2c-32.5-4.7-50.2-9-50.2-29.3
c0-10.9,3.4-29.8,6-40.7l52.7-274.7l33.9,420.8h86.5l205.5-409.3l-54.2,282.5c-8.6,38.1-21.1,45.1-69.1,50.6l-14.6,76.2h287.6
l14.6-76.2c-29.1-4.7-43.6-10.1-43.6-25.7c0-10.1,2.8-21.8,5.4-35l52.7-274.6c4.3-21.8,17.7-42,67.3-42l14.6-76.2H1819z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 3199.076 2159" style="enable-background:new 0 0 3199.076 2159;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E62229;}
.st1{fill:#019B43;}
.st2{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<rect x="2414.286" y="1862.159" width="85.088" height="296.841"/>
<g>
<polygon points="2616.833,1961.468 2531.745,1988.667 2531.745,1862.159 2616.833,1862.159 "/>
<polygon points="2870.315,1988.667 2785.227,1961.468 2785.227,1862.159 2870.315,1862.159 "/>
<polygon points="2632.61,2159 2735.138,2159 2559.365,1862.159 2531.745,1988.667 "/>
<polygon points="2769.449,2159 2666.922,2159 2842.694,1862.159 2870.315,1988.667 "/>
</g>
<path d="M317.733,1883.278l-17.444,29.457v-50.577H198.192c-14.006,0-27.094,7.917-34.912,21.12L0,2159h102.533l131.168-221.493
h51.918L154.453,2159h102.533l136.93-231.223c1.735-2.929,5.759-1.534,5.759,1.996V2159h85.088v-296.842H352.645
C338.639,1862.158,325.551,1870.076,317.733,1883.278z"/>
<path d="M663.054,1925.208h155.41v-63.049l-129.037-0.525h-91.268c-7.044,0-13.625,3.982-17.557,10.621l-40.809,68.912V2159
h278.672v-63.049H624.88v-53.642h156.247l37.337-63.048H624.88v-8.632l20.602-34.791
C649.417,1929.193,656.005,1925.208,663.054,1925.208z"/>
<path d="M3043.666,1925.208h155.41v-63.049l-129.037-0.525h-91.268c-7.043,0-13.625,3.982-17.557,10.621l-40.809,68.912V2159
h278.672v-63.049h-193.584v-53.642h156.246l37.337-63.048h-193.584v-8.632l20.602-34.791
C3030.029,1929.193,3036.616,1925.208,3043.666,1925.208z"/>
<path d="M1555.006,2159l-163.118-275.471c-7.91-13.359-21.153-21.37-35.325-21.37h-155.029V2159h85.089v-116.428v-117.365h14.166
c8.278,0,16.014,4.68,20.635,12.483l62.108,104.881h-96.909l37.336,63.048h0.143h96.766l31.609,53.38H1555.006z"/>
<path d="M1157.418,1979.523h-9.093h-75.67h-27.02l-37.181,62.785h36.328v0.264h27.873v53.379H930.538V1987.97l30.87-52.129
c3.936-6.647,10.526-10.634,17.578-10.634h161.747v-63.049h-135.689l0.311-0.525h-87.928c-9.132,0-17.665,5.162-22.762,13.77
l-49.215,83.108v166.821c0,18.594,13.268,33.668,29.635,33.668h33.675h21.777h142.116h55.451
c16.368,0,29.637-15.074,29.637-33.67v-29.379v-116.428H1157.418z"/>
<path d="M1967.323,1890.057c-10.327-17.441-27.617-27.9-46.119-27.9l-72.938,0.003h-159.788V2159l214.391-0.003h18.334
c18.502,0,35.792-10.459,46.119-27.9l60.381-101.971c2.188-3.695,3.357-8.048,3.357-12.502v-12.094
c0-4.454-1.169-8.806-3.357-12.502L1967.323,1890.057z M1885.602,2095.951h-112.036v-170.742h112.036l42.599,71.932
c4.811,8.123,4.811,18.748,0,26.871L1885.602,2095.951z"/>
<path d="M2295.936,2048.271l48.865-82.522c2.187-3.693,3.355-8.044,3.355-12.495v-10.32c0-4.452-1.168-8.802-3.355-12.496
l-23.911-40.38c-10.328-17.442-27.619-27.902-46.123-27.902h-72.929l-161.184,0.003V2159h85.088v-233.791h108.002
c3.395,0,6.568,1.919,8.463,5.12l6.689,11.295c2.316,3.911,2.316,9.027,0,12.938l-33.172,56.016h-44.638L2258.978,2159h102.527
L2295.936,2048.271z"/>
</g>
</g>
<rect x="0" width="3199.076" height="1599.872"/>
<g>
<polygon class="st0" points="928.398,1139.556 928.398,138.627 94.017,1378.856 1601.785,1378.774 1601.785,138.627 "/>
<polygon class="st1" points="1776.451,166.633 1776.451,198.911 1776.451,1378.857 2176.651,1378.857 2176.651,166.633 "/>
<path class="st1" d="M2455.47,792.544c-9.965,100.187-94.489,178.43-197.298,178.43h-31.163v407.882h81.364
c328.118,0,595.302-260.734,605.757-586.312H2455.47z"/>
<path class="st1" d="M2722.174,329.944l-332.269,294.585c10.461,9.316,19.92,19.728,28.218,31.049l378.399-242.073
C2774.335,383.402,2749.433,355.432,2722.174,329.944z"/>
<path class="st1" d="M2290.666,577.1c13.749,2.269,27.031,5.916,39.672,10.861l181.924-386.17
c-34.477-12.315-70.407-21.558-107.448-27.482L2290.666,577.1z"/>
<path class="st1" d="M2670.727,286.89c-30.367-22.689-62.93-42.592-97.318-59.343l-230.824,365.725
c13.255,6.252,25.699,13.924,37.147,22.831L2670.727,286.89z"/>
<path class="st1" d="M2446.966,712.127c3.581,11.175,6.21,22.777,7.766,34.718h459.166c-1.607-38.201-6.79-75.472-15.147-111.526
L2446.966,712.127z"/>
<path class="st1" d="M2879.508,569.558c-12.32-34.633-27.677-67.823-45.793-99.229l-408.189,196.128
c6.611,10.401,12.273,21.454,16.88,33.05L2879.508,569.558z"/>
<path class="st1" d="M2341.674,167.562c-11.027-0.598-22.125-0.929-33.301-0.929h-81.364v407.763h31.163
c6.595,0,13.11,0.341,19.539,0.969L2341.674,167.562z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -0,0 +1,330 @@
/*
* LibXDiff by Davide Libenzi ( File Differential Library )
* Copyright (C) 2003 Davide Libenzi
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see
* <http://www.gnu.org/licenses/>.
*
* Davide Libenzi <davidel@xmailserver.org>
*
*/
#include "xinclude.h"
static long xdl_get_rec(xdfile_t *xdf, long ri, char const **rec) {
*rec = xdf->recs[ri]->ptr;
return xdf->recs[ri]->size;
}
static int xdl_emit_record(xdfile_t *xdf, long ri, char const *pre, xdemitcb_t *ecb) {
long size, psize = strlen(pre);
char const *rec;
size = xdl_get_rec(xdf, ri, &rec);
if (xdl_emit_diffrec(rec, size, pre, psize, ecb) < 0) {
return -1;
}
return 0;
}
/*
* Starting at the passed change atom, find the latest change atom to be included
* inside the differential hunk according to the specified configuration.
* Also advance xscr if the first changes must be discarded.
*/
xdchange_t *xdl_get_hunk(xdchange_t **xscr, xdemitconf_t const *xecfg)
{
xdchange_t *xch, *xchp, *lxch;
long max_common = 2 * xecfg->ctxlen + xecfg->interhunkctxlen;
long max_ignorable = xecfg->ctxlen;
unsigned long ignored = 0; /* number of ignored blank lines */
/* remove ignorable changes that are too far before other changes */
for (xchp = *xscr; xchp && xchp->ignore; xchp = xchp->next) {
xch = xchp->next;
if (xch == NULL ||
xch->i1 - (xchp->i1 + xchp->chg1) >= max_ignorable)
*xscr = xch;
}
if (*xscr == NULL)
return NULL;
lxch = *xscr;
for (xchp = *xscr, xch = xchp->next; xch; xchp = xch, xch = xch->next) {
long distance = xch->i1 - (xchp->i1 + xchp->chg1);
if (distance > max_common)
break;
if (distance < max_ignorable && (!xch->ignore || lxch == xchp)) {
lxch = xch;
ignored = 0;
} else if (distance < max_ignorable && xch->ignore) {
ignored += xch->chg2;
} else if (lxch != xchp &&
xch->i1 + ignored - (lxch->i1 + lxch->chg1) > max_common) {
break;
} else if (!xch->ignore) {
lxch = xch;
ignored = 0;
} else {
ignored += xch->chg2;
}
}
return lxch;
}
static long def_ff(const char *rec, long len, char *buf, long sz, void *priv)
{
if (len > 0 &&
(isalpha((unsigned char)*rec) || /* identifier? */
*rec == '_' || /* also identifier? */
*rec == '$')) { /* identifiers from VMS and other esoterico */
if (len > sz)
len = sz;
while (0 < len && isspace((unsigned char)rec[len - 1]))
len--;
memcpy(buf, rec, len);
return len;
}
return -1;
}
static long match_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri,
char *buf, long sz)
{
const char *rec;
long len = xdl_get_rec(xdf, ri, &rec);
if (!xecfg->find_func)
return def_ff(rec, len, buf, sz, xecfg->find_func_priv);
return xecfg->find_func(rec, len, buf, sz, xecfg->find_func_priv);
}
static int is_func_rec(xdfile_t *xdf, xdemitconf_t const *xecfg, long ri)
{
char dummy[1];
return match_func_rec(xdf, xecfg, ri, dummy, sizeof(dummy)) >= 0;
}
struct func_line {
long len;
char buf[80];
};
static long get_func_line(xdfenv_t *xe, xdemitconf_t const *xecfg,
struct func_line *func_line, long start, long limit)
{
long l, size, step = (start > limit) ? -1 : 1;
char *buf, dummy[1];
buf = func_line ? func_line->buf : dummy;
size = func_line ? sizeof(func_line->buf) : sizeof(dummy);
for (l = start; l != limit && 0 <= l && l < xe->xdf1.nrec; l += step) {
long len = match_func_rec(&xe->xdf1, xecfg, l, buf, size);
if (len >= 0) {
if (func_line)
func_line->len = len;
return l;
}
}
return -1;
}
static int is_empty_rec(xdfile_t *xdf, long ri)
{
const char *rec;
long len = xdl_get_rec(xdf, ri, &rec);
while (len > 0 && XDL_ISSPACE(*rec)) {
rec++;
len--;
}
return !len;
}
int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb,
xdemitconf_t const *xecfg) {
long s1, s2, e1, e2, lctx;
xdchange_t *xch, *xche;
long funclineprev = -1;
struct func_line func_line = { 0 };
for (xch = xscr; xch; xch = xche->next) {
xdchange_t *xchp = xch;
xche = xdl_get_hunk(&xch, xecfg);
if (!xch)
break;
pre_context_calculation:
s1 = XDL_MAX(xch->i1 - xecfg->ctxlen, 0);
s2 = XDL_MAX(xch->i2 - xecfg->ctxlen, 0);
if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
long fs1, i1 = xch->i1;
/* Appended chunk? */
if (i1 >= xe->xdf1.nrec) {
long i2 = xch->i2;
/*
* We don't need additional context if
* a whole function was added.
*/
while (i2 < xe->xdf2.nrec) {
if (is_func_rec(&xe->xdf2, xecfg, i2))
goto post_context_calculation;
i2++;
}
/*
* Otherwise get more context from the
* pre-image.
*/
i1 = xe->xdf1.nrec - 1;
}
fs1 = get_func_line(xe, xecfg, NULL, i1, -1);
while (fs1 > 0 && !is_empty_rec(&xe->xdf1, fs1 - 1) &&
!is_func_rec(&xe->xdf1, xecfg, fs1 - 1))
fs1--;
if (fs1 < 0)
fs1 = 0;
if (fs1 < s1) {
s2 = XDL_MAX(s2 - (s1 - fs1), 0);
s1 = fs1;
/*
* Did we extend context upwards into an
* ignored change?
*/
while (xchp != xch &&
xchp->i1 + xchp->chg1 <= s1 &&
xchp->i2 + xchp->chg2 <= s2)
xchp = xchp->next;
/* If so, show it after all. */
if (xchp != xch) {
xch = xchp;
goto pre_context_calculation;
}
}
}
post_context_calculation:
lctx = xecfg->ctxlen;
lctx = XDL_MIN(lctx, xe->xdf1.nrec - (xche->i1 + xche->chg1));
lctx = XDL_MIN(lctx, xe->xdf2.nrec - (xche->i2 + xche->chg2));
e1 = xche->i1 + xche->chg1 + lctx;
e2 = xche->i2 + xche->chg2 + lctx;
if (xecfg->flags & XDL_EMIT_FUNCCONTEXT) {
long fe1 = get_func_line(xe, xecfg, NULL,
xche->i1 + xche->chg1,
xe->xdf1.nrec);
while (fe1 > 0 && is_empty_rec(&xe->xdf1, fe1 - 1))
fe1--;
if (fe1 < 0)
fe1 = xe->xdf1.nrec;
if (fe1 > e1) {
e2 = XDL_MIN(e2 + (fe1 - e1), xe->xdf2.nrec);
e1 = fe1;
}
/*
* Overlap with next change? Then include it
* in the current hunk and start over to find
* its new end.
*/
if (xche->next) {
long l = XDL_MIN(xche->next->i1,
xe->xdf1.nrec - 1);
if (l - xecfg->ctxlen <= e1 ||
get_func_line(xe, xecfg, NULL, l, e1) < 0) {
xche = xche->next;
goto post_context_calculation;
}
}
}
/*
* Emit current hunk header.
*/
if (xecfg->flags & XDL_EMIT_FUNCNAMES) {
get_func_line(xe, xecfg, &func_line,
s1 - 1, funclineprev);
funclineprev = s1 - 1;
}
if (!(xecfg->flags & XDL_EMIT_NO_HUNK_HDR) &&
xdl_emit_hunk_hdr(s1 + 1, e1 - s1, s2 + 1, e2 - s2,
func_line.buf, func_line.len, ecb) < 0)
return -1;
/*
* Emit pre-context.
*/
for (; s2 < xch->i2; s2++)
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
return -1;
for (s1 = xch->i1, s2 = xch->i2;; xch = xch->next) {
/*
* Merge previous with current change atom.
*/
for (; s1 < xch->i1 && s2 < xch->i2; s1++, s2++)
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
return -1;
/*
* Removes lines from the first file.
*/
for (s1 = xch->i1; s1 < xch->i1 + xch->chg1; s1++)
if (xdl_emit_record(&xe->xdf1, s1, "-", ecb) < 0)
return -1;
/*
* Adds lines from the second file.
*/
for (s2 = xch->i2; s2 < xch->i2 + xch->chg2; s2++)
if (xdl_emit_record(&xe->xdf2, s2, "+", ecb) < 0)
return -1;
if (xch == xche)
break;
s1 = xch->i1 + xch->chg1;
s2 = xch->i2 + xch->chg2;
}
/*
* Emit post-context.
*/
for (s2 = xche->i2 + xche->chg2; s2 < e2; s2++)
if (xdl_emit_record(&xe->xdf2, s2, " ", ecb) < 0)
return -1;
}
return 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

View file

@ -0,0 +1,130 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_refs_h__
#define INCLUDE_refs_h__
#include "common.h"
#include "git2/oid.h"
#include "git2/refs.h"
#include "git2/refdb.h"
#include "strmap.h"
#include "str.h"
#include "oid.h"
extern bool git_reference__enable_symbolic_ref_target_validation;
#define GIT_REFS_DIR "refs/"
#define GIT_REFS_HEADS_DIR GIT_REFS_DIR "heads/"
#define GIT_REFS_TAGS_DIR GIT_REFS_DIR "tags/"
#define GIT_REFS_REMOTES_DIR GIT_REFS_DIR "remotes/"
#define GIT_REFS_NOTES_DIR GIT_REFS_DIR "notes/"
#define GIT_REFS_DIR_MODE 0777
#define GIT_REFS_FILE_MODE 0666
#define GIT_RENAMED_REF_FILE GIT_REFS_DIR "RENAMED-REF"
#define GIT_SYMREF "ref: "
#define GIT_PACKEDREFS_FILE "packed-refs"
#define GIT_PACKEDREFS_HEADER "# pack-refs with: peeled fully-peeled sorted "
#define GIT_PACKEDREFS_FILE_MODE 0666
#define GIT_HEAD_FILE "HEAD"
#define GIT_ORIG_HEAD_FILE "ORIG_HEAD"
#define GIT_FETCH_HEAD_FILE "FETCH_HEAD"
#define GIT_MERGE_HEAD_FILE "MERGE_HEAD"
#define GIT_REVERT_HEAD_FILE "REVERT_HEAD"
#define GIT_CHERRYPICK_HEAD_FILE "CHERRY_PICK_HEAD"
#define GIT_BISECT_LOG_FILE "BISECT_LOG"
#define GIT_REBASE_MERGE_DIR "rebase-merge/"
#define GIT_REBASE_MERGE_INTERACTIVE_FILE GIT_REBASE_MERGE_DIR "interactive"
#define GIT_REBASE_APPLY_DIR "rebase-apply/"
#define GIT_REBASE_APPLY_REBASING_FILE GIT_REBASE_APPLY_DIR "rebasing"
#define GIT_REBASE_APPLY_APPLYING_FILE GIT_REBASE_APPLY_DIR "applying"
#define GIT_SEQUENCER_DIR "sequencer/"
#define GIT_SEQUENCER_HEAD_FILE GIT_SEQUENCER_DIR "head"
#define GIT_SEQUENCER_OPTIONS_FILE GIT_SEQUENCER_DIR "options"
#define GIT_SEQUENCER_TODO_FILE GIT_SEQUENCER_DIR "todo"
#define GIT_STASH_FILE "stash"
#define GIT_REFS_STASH_FILE GIT_REFS_DIR GIT_STASH_FILE
#define GIT_REFERENCE_FORMAT__PRECOMPOSE_UNICODE (1u << 16)
#define GIT_REFERENCE_FORMAT__VALIDATION_DISABLE (1u << 15)
#define GIT_REFNAME_MAX 1024
typedef char git_refname_t[GIT_REFNAME_MAX];
struct git_reference {
git_refdb *db;
git_reference_t type;
union {
git_oid oid;
char *symbolic;
} target;
git_oid peel;
char name[GIT_FLEX_ARRAY];
};
/**
* Reallocate the reference with a new name
*
* Note that this is a dangerous operation, as on success, all existing
* pointers to the old reference will now be dangling. Only call this on objects
* you control, possibly using `git_reference_dup`.
*/
git_reference *git_reference__realloc(git_reference **ptr_to_ref, const char *name);
int git_reference__normalize_name(git_str *buf, const char *name, unsigned int flags);
int git_reference__update_terminal(git_repository *repo, const char *ref_name, const git_oid *oid, const git_signature *sig, const char *log_message);
int git_reference__name_is_valid(int *valid, const char *name, unsigned int flags);
int git_reference__is_branch(const char *ref_name);
int git_reference__is_remote(const char *ref_name);
int git_reference__is_tag(const char *ref_name);
int git_reference__is_note(const char *ref_name);
const char *git_reference__shorthand(const char *name);
/**
* Lookup a reference by name and try to resolve to an OID.
*
* You can control how many dereferences this will attempt to resolve the
* reference with the `max_deref` parameter, or pass -1 to use a sane
* default. If you pass 0 for `max_deref`, this will not attempt to resolve
* the reference. For any value of `max_deref` other than 0, not
* successfully resolving the reference will be reported as an error.
* The generated reference must be freed by the user.
*
* @param reference_out Pointer to the looked-up reference
* @param repo The repository to look up the reference
* @param name The long name for the reference (e.g. HEAD, ref/heads/master, refs/tags/v0.1.0, ...)
* @param max_deref Maximum number of dereferences to make of symbolic refs, 0 means simple lookup, < 0 means use default reasonable value
* @return 0 on success or < 0 on error; not being able to resolve the reference is an error unless 0 was passed for max_deref
*/
int git_reference_lookup_resolved(
git_reference **reference_out,
git_repository *repo,
const char *name,
int max_deref);
int git_reference__log_signature(git_signature **out, git_repository *repo);
/** Update a reference after a commit. */
int git_reference__update_for_commit(
git_repository *repo,
git_reference *ref,
const char *ref_name,
const git_oid *id,
const char *operation);
int git_reference__is_unborn_head(bool *unborn, const git_reference *ref, git_repository *repo);
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

View file

@ -0,0 +1,98 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_git_proxy_h__
#define INCLUDE_git_proxy_h__
#include "common.h"
#include "cert.h"
#include "credential.h"
GIT_BEGIN_DECL
/**
* The type of proxy to use.
*/
typedef enum {
/**
* Do not attempt to connect through a proxy
*
* If built against libcurl, it itself may attempt to connect
* to a proxy if the environment variables specify it.
*/
GIT_PROXY_NONE,
/**
* Try to auto-detect the proxy from the git configuration.
*/
GIT_PROXY_AUTO,
/**
* Connect via the URL given in the options
*/
GIT_PROXY_SPECIFIED
} git_proxy_t;
/**
* Options for connecting through a proxy
*
* Note that not all types may be supported, depending on the platform
* and compilation options.
*/
typedef struct {
unsigned int version;
/**
* The type of proxy to use, by URL, auto-detect.
*/
git_proxy_t type;
/**
* The URL of the proxy.
*/
const char *url;
/**
* This will be called if the remote host requires
* authentication in order to connect to it.
*
* Returning GIT_PASSTHROUGH will make libgit2 behave as
* though this field isn't set.
*/
git_credential_acquire_cb credentials;
/**
* If cert verification fails, this will be called to let the
* user make the final decision of whether to allow the
* connection to proceed. Returns 0 to allow the connection
* or a negative value to indicate an error.
*/
git_transport_certificate_check_cb certificate_check;
/**
* Payload to be provided to the credentials and certificate
* check callbacks.
*/
void *payload;
} git_proxy_options;
#define GIT_PROXY_OPTIONS_VERSION 1
#define GIT_PROXY_OPTIONS_INIT {GIT_PROXY_OPTIONS_VERSION}
/**
* Initialize git_proxy_options structure
*
* Initializes a `git_proxy_options` with default values. Equivalent to
* creating an instance with `GIT_PROXY_OPTIONS_INIT`.
*
* @param opts The `git_proxy_options` struct to initialize.
* @param version The struct version; pass `GIT_PROXY_OPTIONS_VERSION`.
* @return Zero on success; -1 on failure.
*/
GIT_EXTERN(int) git_proxy_options_init(git_proxy_options *opts, unsigned int version);
GIT_END_DECL
#endif

View file

@ -0,0 +1,128 @@
/*
* Copyright (c) 2016 Neil Birkbeck <neil.birkbeck@gmail.com>
*
* This file is part of FFmpeg.
*
* FFmpeg 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 2.1 of the License, or (at your option) any later version.
*
* FFmpeg 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 FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVUTIL_MASTERING_DISPLAY_METADATA_H
#define AVUTIL_MASTERING_DISPLAY_METADATA_H
#include "frame.h"
#include "rational.h"
/**
* Mastering display metadata capable of representing the color volume of
* the display used to master the content (SMPTE 2086:2014).
*
* To be used as payload of a AVFrameSideData or AVPacketSideData with the
* appropriate type.
*
* @note The struct should be allocated with av_mastering_display_metadata_alloc()
* and its size is not a part of the public ABI.
*/
typedef struct AVMasteringDisplayMetadata {
/**
* CIE 1931 xy chromaticity coords of color primaries (r, g, b order).
*/
AVRational display_primaries[3][2];
/**
* CIE 1931 xy chromaticity coords of white point.
*/
AVRational white_point[2];
/**
* Min luminance of mastering display (cd/m^2).
*/
AVRational min_luminance;
/**
* Max luminance of mastering display (cd/m^2).
*/
AVRational max_luminance;
/**
* Flag indicating whether the display primaries (and white point) are set.
*/
int has_primaries;
/**
* Flag indicating whether the luminance (min_ and max_) have been set.
*/
int has_luminance;
} AVMasteringDisplayMetadata;
/**
* Allocate an AVMasteringDisplayMetadata structure and set its fields to
* default values. The resulting struct can be freed using av_freep().
*
* @return An AVMasteringDisplayMetadata filled with default values or NULL
* on failure.
*/
AVMasteringDisplayMetadata *av_mastering_display_metadata_alloc(void);
/**
* Allocate a complete AVMasteringDisplayMetadata and add it to the frame.
*
* @param frame The frame which side data is added to.
*
* @return The AVMasteringDisplayMetadata structure to be filled by caller.
*/
AVMasteringDisplayMetadata *av_mastering_display_metadata_create_side_data(AVFrame *frame);
/**
* Content light level needed by to transmit HDR over HDMI (CTA-861.3).
*
* To be used as payload of a AVFrameSideData or AVPacketSideData with the
* appropriate type.
*
* @note The struct should be allocated with av_content_light_metadata_alloc()
* and its size is not a part of the public ABI.
*/
typedef struct AVContentLightMetadata {
/**
* Max content light level (cd/m^2).
*/
unsigned MaxCLL;
/**
* Max average light level per frame (cd/m^2).
*/
unsigned MaxFALL;
} AVContentLightMetadata;
/**
* Allocate an AVContentLightMetadata structure and set its fields to
* default values. The resulting struct can be freed using av_freep().
*
* @return An AVContentLightMetadata filled with default values or NULL
* on failure.
*/
AVContentLightMetadata *av_content_light_metadata_alloc(size_t *size);
/**
* Allocate a complete AVContentLightMetadata and add it to the frame.
*
* @param frame The frame which side data is added to.
*
* @return The AVContentLightMetadata structure to be filled by caller.
*/
AVContentLightMetadata *av_content_light_metadata_create_side_data(AVFrame *frame);
#endif /* AVUTIL_MASTERING_DISPLAY_METADATA_H */

View file

@ -0,0 +1,40 @@
# Linear for ES-DE (linear-es-de)
The following options are included:
6 variants:
- Textlist
- Textlist without videos
- Simple textlist
- Simple textlist without videos
- Carousel
- Simple carousel
5 color schemes:
- Dark
- Light
- NSO
- LIVE
- PSN
2 font sizes:
- Medium
- Large
4 aspect ratios:
- 16:9
- 16:10
- 4:3
- 21:9
3 transitions:
- Instant and slide
- Instant
- Fade
Credits and license information can be found next to this file.

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="52"
height="40"
version="1.1"
viewBox="0 0 52 40"
id="svg4"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs8" />
<path
id="rect6831"
style="opacity:1;fill:#ffffff;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.745;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill;stop-color:#000000;stop-opacity:1;fill-opacity:0.25"
d="M 0.8722719,0.87265904 V 39.127341 H 31.564741 L 50.76394,19.999999 31.564741,0.87265904 Z" />
<path
id="rect6831-3"
style="fill:#ffffff;fill-opacity:0.2;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.745;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill;stop-color:#000000"
d="M 18.987354,11.012434 V 28.987566 H 18.883649 L 9.8625864,20.000459 18.883649,11.012434 Z" />
</svg>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<svg viewBox="0 0 264 36" xmlns="http://www.w3.org/2000/svg">
<path d="M 33.899 12.062 C 31.858 12.059 23.686 12.714 23.686 23.958 C 23.686 36.805 34.35 35.976 34.35 35.976 C 34.35 35.976 44.768 35.867 44.768 23.958 C 44.768 12.048 34.467 12.072 34.35 12.062 C 34.35 12.062 34.19 12.064 33.899 12.062 Z M 34.35 18.155 C 34.35 18.155 38.165 17.533 38.165 23.958 C 38.165 29.907 34.35 29.263 34.35 29.263 C 34.35 29.263 30.372 29.307 30.372 23.958 C 30.372 17.51 34.35 18.23 34.35 18.155 Z" id="path3667" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 48.845 2.679 L 55.524 2.679 L 55.524 20.874 L 60.693 12.066 L 67.829 12.066 L 60.693 22.614 L 67.829 35.993 L 60.693 35.993 L 55.524 24.857 L 55.524 35.993 L 48.845 35.993 Z" id="path3678" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 71.914 5.92 L 74.438 9.526 L 84.038 3.722 L 81.079 0 L 72.029 5.862 L 71.914 5.92 Z" id="path3711" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 92.299 35.993 L 98.205 35.993 L 98.205 22.241 C 98.205 22.241 98.451 18.625 101.486 18.625 C 104.521 18.625 104.521 22.241 104.521 22.241 L 104.521 35.993 L 110.099 35.993 L 110.099 22.241 C 110.099 22.241 110.223 18.625 113.259 18.625 C 116.293 18.625 116.293 22.241 116.293 22.241 L 116.293 35.993 L 122.076 35.993 L 122.076 18.625 C 122.076 18.625 122.487 12.066 116.293 12.066 C 110.099 12.066 110.099 15.968 110.099 15.968 C 110.099 15.968 110.838 12.066 104.521 12.066 C 98.205 12.066 98.205 15.968 98.205 15.968 C 98.205 15.968 99.107 12.066 95.703 12.066 C 92.299 12.066 92.299 12.066 92.299 12.066 Z" id="path3727" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 136.171 12.076 C 134.13 12.072 125.959 12.728 125.959 23.969 C 125.959 36.818 136.623 35.989 136.623 35.989 C 136.623 35.989 147.042 35.879 147.042 23.969 C 147.042 12.061 136.74 12.083 136.623 12.076 C 136.623 12.076 136.463 12.076 136.171 12.076 Z M 136.623 18.167 C 136.623 18.167 140.437 17.546 140.437 23.969 C 140.437 29.92 136.623 29.275 136.623 29.275 C 136.623 29.275 132.645 29.321 132.645 23.969 C 132.645 17.524 136.623 18.243 136.623 18.167 Z" id="path3667-1" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 150.742 35.993 L 157.181 35.993 L 157.181 22.241 C 157.181 22.241 157.017 18.625 160.586 18.625 C 164.155 18.625 164.155 22.241 164.155 22.241 L 164.155 35.993 L 170.142 35.993 L 170.142 18.625 C 170.142 18.625 170.183 12.066 164.155 12.066 C 158.125 12.066 157.181 15.968 157.181 15.968 C 157.181 15.968 157.756 12.066 155.376 12.066 C 152.998 12.066 150.742 12.066 150.742 12.066 Z" id="path3759" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 185.01 12.066 L 212.649 12.066 C 212.649 12.066 215.317 11.963 215.317 14.615 C 215.317 17.268 215.317 34.611 215.317 34.611 C 215.317 34.611 215.376 35.993 214.041 35.993 C 212.708 35.993 210.04 35.993 210.04 35.993 C 210.04 35.993 208.705 35.96 208.705 34.611 C 208.705 33.264 208.705 22.241 208.705 22.241 C 208.705 22.241 208.589 20.662 207.429 20.662 C 206.269 20.662 203.427 20.662 203.427 20.662 C 203.427 20.662 202.092 20.506 202.092 22.241 C 202.092 23.976 202.092 34.611 202.092 34.611 C 202.092 34.611 201.918 35.993 200.759 35.993 C 199.598 35.993 196.988 35.993 196.988 35.993 C 196.988 35.993 195.537 36.077 195.537 34.611 C 195.537 33.146 195.537 22.241 195.537 22.241 C 195.537 22.241 195.943 20.662 194.145 20.662 C 192.347 20.662 190.375 20.662 190.375 20.662 C 190.375 20.662 189.04 20.506 189.04 22.241 C 189.04 23.976 189.04 34.611 189.04 34.611 C 189.04 34.611 189.04 35.993 187.707 35.993 C 186.372 35.993 183.705 35.993 183.705 35.993 C 183.705 35.993 182.486 35.9 182.486 34.611 C 182.486 33.322 182.486 14.615 182.486 14.615 C 182.486 14.615 182.545 12.259 185.01 12.066 Z" id="path3775" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 225.752 23.976 C 225.752 23.976 227.036 23.878 227.036 25.256 C 227.036 26.633 227.036 34.611 227.036 34.611 C 227.036 34.611 226.9 35.993 225.794 35.993 C 224.686 35.993 223.086 35.993 223.086 35.993 C 223.086 35.993 221.757 35.957 221.757 34.611 C 221.757 33.265 221.757 25.256 221.757 25.256 C 221.757 25.256 221.814 23.976 223.127 23.976 C 224.439 23.976 225.671 24.023 225.752 23.976 Z" id="path3787" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 223.127 19.958 C 223.127 19.958 221.757 19.983 221.757 18.625 C 221.757 17.268 221.757 14.615 221.757 14.615 C 221.757 14.615 221.754 13.289 223.148 13.289 C 224.542 13.289 225.773 13.289 225.773 13.289 C 225.773 13.289 227.036 13.262 227.036 14.615 C 227.036 15.968 227.036 18.625 227.036 18.625 C 227.036 18.625 227.167 19.958 225.794 19.958 C 224.42 19.958 223.169 19.94 223.127 19.958 Z" id="path3789" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 233.586 34.611 C 233.586 34.611 233.627 35.993 234.94 35.993 C 236.252 35.993 238.796 35.993 238.796 35.993 C 238.796 35.993 240.149 35.916 240.149 34.611 C 240.149 33.307 240.149 22.241 240.149 22.241 C 240.149 22.241 240.19 20.662 241.462 20.662 C 242.733 20.662 245.399 20.662 245.399 20.662 C 245.399 20.662 246.752 20.506 246.752 22.241 C 246.752 23.976 246.752 34.611 246.752 34.611 C 246.752 34.611 246.671 35.993 248.065 35.993 C 249.46 35.993 250.732 35.993 250.732 35.993 C 250.732 35.993 251.962 35.916 251.962 34.611 C 251.962 33.307 251.962 15.968 251.962 15.968 C 251.962 15.968 251.921 13.289 249.337 13.289 C 246.752 13.289 236.252 13.289 236.252 13.289 C 236.252 13.289 233.586 13.312 233.586 15.968 C 233.586 18.625 233.71 34.757 233.586 34.611 Z" id="path3807" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 262.714 23.976 C 262.714 23.976 263.997 23.878 263.997 25.256 C 263.997 26.633 263.997 34.611 263.997 34.611 C 263.997 34.611 263.863 35.993 262.755 35.993 C 261.647 35.993 260.048 35.993 260.048 35.993 C 260.048 35.993 258.719 35.957 258.719 34.611 C 258.719 33.265 258.719 25.256 258.719 25.256 C 258.719 25.256 258.777 23.976 260.089 23.976 C 261.402 23.976 262.632 24.023 262.714 23.976 Z" id="path3787-7" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 260.089 19.958 C 260.089 19.958 258.719 19.983 258.719 18.625 C 258.719 17.268 258.719 14.615 258.719 14.615 C 258.719 14.615 258.716 13.289 260.11 13.289 C 261.504 13.289 262.735 13.289 262.735 13.289 C 262.735 13.289 263.997 13.262 263.997 14.615 C 263.997 15.968 263.997 18.625 263.997 18.625 C 263.997 18.625 264.129 19.958 262.755 19.958 C 261.381 19.958 260.13 19.94 260.089 19.958 Z" id="path3789-4" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 78.617 12.062 C 70.739 12.062 68.937 18.14 68.937 23.958 C 68.937 29.776 72.422 35.976 79.15 35.976 C 85.879 35.976 86.492 34.609 86.492 34.609 L 86.492 30.588 C 86.445 30.574 80.983 30.588 78.084 30.588 C 75.183 30.588 75.745 26.651 75.745 26.651 L 88.256 26.651 L 88.256 22.258 C 88.256 22.258 88.259 12.062 78.617 12.062 Z M 79.068 17.285 C 82.396 17.285 82.431 18.611 82.431 18.611 L 82.431 22.258 L 75.745 22.258 L 75.745 18.611 C 75.745 18.611 75.74 17.285 79.068 17.285 Z" id="path3696" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
<path d="M 0 4.52 L 0 35.976 L 7.383 35.976 L 7.383 24.868 L 13.125 24.868 C 13.125 24.868 20.549 24.247 20.549 18.155 L 20.549 12.062 C 20.549 12.062 20.503 4.52 13.125 4.52 C 5.821 4.52 0.032 4.625 0 4.52 Z M 7.383 10.612 C 7.394 10.614 10.149 10.612 11.321 10.612 C 13.342 11.216 13.125 13.307 13.125 13.307 L 13.125 15.959 C 13.125 18.164 11.321 18.611 11.321 18.611 L 7.383 18.611 Z" id="path2870" style="fill-opacity: 1; stroke: none; stroke-width: 5.91784; stroke-linecap: butt; stroke-linejoin: round; stroke-miterlimit: 4; stroke-dasharray: none; stroke-opacity: 1; paint-order: markers stroke; fill: rgb(255, 255, 255);"/>
</svg>

After

Width:  |  Height:  |  Size: 9.9 KiB

View file

@ -0,0 +1,16 @@
<theme>
<view name="system, gamelist">
<image name="band1">
<color>7b79aa</color>
</image>
<image name="band2">
<color>524c82</color>
</image>
<image name="band3">
<color>cbc9e0</color>
</image>
<image name="band4">
<color>1e1c1a</color>
</image>
</view>
</theme>

View file

@ -0,0 +1,75 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_bitvec_h__
#define INCLUDE_bitvec_h__
#include "common.h"
/*
* This is a silly little fixed length bit vector type that will store
* vectors of 64 bits or less directly in the structure and allocate
* memory for vectors longer than 64 bits. You can use the two versions
* transparently through the API and avoid heap allocation completely when
* using a short bit vector as a result.
*/
typedef struct {
size_t length;
union {
uint64_t *words;
uint64_t bits;
} u;
} git_bitvec;
GIT_INLINE(int) git_bitvec_init(git_bitvec *bv, size_t capacity)
{
memset(bv, 0x0, sizeof(*bv));
if (capacity >= 64) {
bv->length = (capacity / 64) + 1;
bv->u.words = git__calloc(bv->length, sizeof(uint64_t));
if (!bv->u.words)
return -1;
}
return 0;
}
#define GIT_BITVEC_MASK(BIT) ((uint64_t)1 << (BIT % 64))
#define GIT_BITVEC_WORD(BV, BIT) (BV->length ? &BV->u.words[BIT / 64] : &BV->u.bits)
GIT_INLINE(void) git_bitvec_set(git_bitvec *bv, size_t bit, bool on)
{
uint64_t *word = GIT_BITVEC_WORD(bv, bit);
uint64_t mask = GIT_BITVEC_MASK(bit);
if (on)
*word |= mask;
else
*word &= ~mask;
}
GIT_INLINE(bool) git_bitvec_get(git_bitvec *bv, size_t bit)
{
uint64_t *word = GIT_BITVEC_WORD(bv, bit);
return (*word & GIT_BITVEC_MASK(bit)) != 0;
}
GIT_INLINE(void) git_bitvec_clear(git_bitvec *bv)
{
if (!bv->length)
bv->u.bits = 0;
else
memset(bv->u.words, 0x0, bv->length * sizeof(uint64_t));
}
GIT_INLINE(void) git_bitvec_free(git_bitvec *bv)
{
if (bv->length)
git__free(bv->u.words);
}
#endif

View file

@ -0,0 +1,334 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="256"
height="256"
viewBox="0 0 67.733334 67.733334"
version="1.1"
id="svg4925"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
sodipodi:docname="gamepad_nintendo_nes.svg">
<defs
id="defs4919" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.3222159"
inkscape:cx="-141.71258"
inkscape:cy="91.156289"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
units="px"
inkscape:window-width="3840"
inkscape:window-height="2065"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:snap-global="false" />
<metadata
id="metadata4922">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-229.26664)">
<g
id="g5404"
transform="matrix(5.9544334,0,0,5.9544334,0.78234597,-1472.249)">
<g
style="fill:#c2c2c2;fill-opacity:1;stroke:#000000;stroke-width:5.20466661;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,9.9447542,293.31016)"
id="g20">
<path
id="path22"
style="fill:#c2c2c2;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.20466661;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 0,0 c -1.039,0 -1.881,0.958 -1.881,2.139 v 415.804 c 0,1.182 0.842,2.14 1.881,2.14 h 178.662 c 1.038,0 1.88,-0.958 1.88,-2.14 V 2.139 C 180.542,0.958 179.7,0 178.662,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,6.464353,293.10033)"
id="g24">
<path
id="path26"
style="fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v -152.916 c 0,-1.111 0.65,-2.012 1.451,-2.012 H 139.34 c 0.802,0 1.451,0.901 1.451,2.012 v 391.023 c 0,1.112 -0.649,2.012 -1.451,2.012 H 1.451 C 0.65,240.119 0,239.219 0,238.107 V 117.433 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,6.4908229,292.51958)"
id="g28">
<path
id="path30"
style="fill:#212121;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -3.512,0 -6.358,2.314 -6.358,5.169 v 108.025 c 0,2.856 2.846,5.17 6.358,5.17 h 27.98 c 3.511,0 6.359,-2.314 6.359,-5.17 V 5.169 C 34.339,2.314 31.491,0 27.98,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#d2d2d2;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,6.3691078,292.49015)"
id="g32">
<path
id="path34"
style="fill:#d2d2d2;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -1.287,0 -2.33,1.043 -2.33,2.33 v 102.054 c 0,1.286 1.043,2.329 2.33,2.329 h 25.164 c 1.287,0 2.33,-1.043 2.33,-2.329 V 2.33 C 27.494,1.043 26.451,0 25.164,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#7a7a7a;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,6.4810844,290.23659)"
id="g36">
<path
id="path38"
style="fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 2.059,0 3.728,1.67 3.728,3.729 v 109.975 c 0,2.06 -1.669,3.728 -3.728,3.728 h -11.301 c -2.058,0 -3.727,-1.668 -3.727,-3.728 V 3.729 C -15.028,1.67 -13.359,0 -11.301,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#7a7a7a;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,6.4810844,290.77188)"
id="g40">
<path
id="path42"
style="fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 2.059,0 3.729,1.67 3.729,3.729 v 109.975 c 0,2.06 -1.67,3.728 -3.729,3.728 h -11.301 c -2.058,0 -3.727,-1.668 -3.727,-3.728 V 3.729 C -15.028,1.67 -13.359,0 -11.301,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#7a7a7a;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,6.4810844,291.32568)"
id="g44">
<path
id="path46"
style="fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 2.06,0 3.729,1.67 3.729,3.729 v 109.975 c 0,2.06 -1.669,3.728 -3.729,3.728 h -11.3 c -2.059,0 -3.728,-1.668 -3.728,-3.728 V 3.729 C -15.028,1.67 -13.359,0 -11.3,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#7a7a7a;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,6.4031809,292.84107)"
id="g48">
<path
id="path50"
style="fill:#7a7a7a;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 109.975 c 0,2.06 -1.669,3.728 -3.727,3.728 h -8.681 V -3.729 h 8.681 C -1.669,-3.729 0,-2.059 0,0"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#d2d2d2;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,3.0886639,292.15446)"
id="g52">
<path
id="path54"
style="fill:#d2d2d2;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v -20.241 c 0,-2.059 1.669,-3.728 3.729,-3.728 h 27.726 c 2.06,0 3.729,1.669 3.729,3.728 V 0 h 20.242 c 2.058,0 3.727,1.67 3.727,3.728 v 27.727 c 0,2.06 -1.669,3.729 -3.727,3.729 H 35.184 v 20.242 c 0,2.058 -1.669,3.728 -3.729,3.728 H 3.729 C 1.669,59.154 0,57.484 0,55.426 V 35.184 h -20.241 c -2.059,0 -3.729,-1.669 -3.729,-3.729 V 3.728 C -23.97,1.67 -22.3,0 -20.241,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#c2c2c2;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,7.8323054,292.63419)"
id="g56">
<path
id="path58"
style="fill:#c2c2c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -1.287,0 -2.33,1.043 -2.33,2.33 v 38.912 c 0,1.286 1.043,2.329 2.33,2.329 h 39.377 c 1.287,0 2.33,-1.043 2.33,-2.329 V 2.33 C 41.707,1.043 40.664,0 39.377,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,7.7397953,292.22282)"
id="g60">
<path
id="path62"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -9.587,0 -17.358,7.771 -17.358,17.357 0,9.588 7.771,17.36 17.358,17.36 9.587,0 17.358,-7.772 17.358,-17.36 C 17.358,7.771 9.587,0 0,0"
inkscape:connector-curvature="0" />
</g>
<g
style="fill:#c2c2c2;fill-opacity:1"
transform="matrix(0,-0.02089351,-0.02089351,0,8.9744701,292.63419)"
id="g64">
<path
id="path66"
style="fill:#c2c2c2;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -1.287,0 -2.33,1.043 -2.33,2.33 v 38.911 c 0,1.286 1.043,2.329 2.33,2.329 h 39.377 c 1.287,0 2.33,-1.043 2.33,-2.329 V 2.33 C 41.707,1.043 40.664,0 39.377,0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,8.8819599,292.22282)"
id="g68">
<path
id="path70"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -9.587,0 -17.358,7.771 -17.358,17.357 0,9.588 7.771,17.36 17.358,17.36 9.587,0 17.358,-7.772 17.358,-17.36 C 17.358,7.771 9.587,0 0,0"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,4.4506386,292.34857)"
id="g72">
<path
id="path74"
style="fill:#212121;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,3.323 2.694,6.019 6.019,6.019 3.325,0 6.019,-2.696 6.019,-6.019 v -21.94 c 0,-3.325 -2.694,-6.02 -6.019,-6.02 -3.325,0 -6.019,2.695 -6.019,6.02 z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,5.5995372,292.34857)"
id="g76">
<path
id="path78"
style="fill:#212121;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0,3.325 2.694,6.02 6.019,6.02 3.325,0 6.019,-2.695 6.019,-6.02 v -21.94 c 0,-3.325 -2.694,-6.02 -6.019,-6.02 -3.325,0 -6.019,2.695 -6.019,6.02 z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,3.0229224,292.08875)"
id="g80">
<path
id="path82"
style="fill:#212121;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V -24.058 H 28.893 V 0 H 52.95 V 28.893 H 28.893 V 52.949 H 0 V 28.893 H -24.057 V 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,2.7211094,291.4072)"
id="g84">
<path
id="path86"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V -6 H 6.933 V -8.563 L 15.379,0 6.933,8.563 V 6 H 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,2.7211094,292.16662)"
id="g88">
<path
id="path90"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 V 6 H -6.932 V 8.563 L -15.378,0 -6.932,-8.563 V -6 H 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,3.1008238,291.7915)"
id="g92">
<path
id="path94"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H -6 V -6.932 H -8.564 L 0,-15.377 8.563,-6.932 H 5.999 V 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,2.3413927,291.7915)"
id="g96">
<path
id="path98"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 H 5.999 V 6.932 H 8.563 L 0,15.379 -8.564,6.932 H -6 V 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,2.8862161,291.7915)"
id="g100">
<path
id="path102"
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -4.364,0 -7.902,3.539 -7.902,7.902 0,4.366 3.538,7.903 7.902,7.903 4.363,0 7.902,-3.537 7.902,-7.903 C 7.902,3.539 4.363,0 0,0"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,7.175263,290.8466)"
id="g104">
<path
id="path106"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c 0.08,0.115 0.173,0.176 0.267,0.234 2.855,1.764 5.71,3.53 8.568,5.287 0.172,0.107 0.243,0.213 0.24,0.42 C 9.064,7.103 9.07,8.264 9.07,9.424 9.07,9.516 9.061,9.607 9.057,9.713 H -4.03 V 5.705 H 5.015 C 5.021,5.682 5.029,5.659 5.035,5.637 4.946,5.578 4.856,5.518 4.767,5.461 1.915,3.691 -0.936,1.919 -3.791,0.155 -3.982,0.037 -4.053,-0.09 -4.051,-0.316 -4.039,-1.448 -4.045,-2.58 -4.045,-3.713 V -4.008 H 9.049 V 0 Z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,8.5241189,290.87865)"
id="g108">
<path
id="path110"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 c -0.848,0.033 -1.414,0.732 -1.385,1.563 0.03,0.85 0.614,1.467 1.462,1.501 0.611,0.025 1.227,0.004 1.839,0.004 V 3.073 C 2.481,3.073 3.048,3.086 3.613,3.07 4.539,3.044 5.123,2.465 5.154,1.569 5.184,0.696 4.636,0.03 3.731,-0.006 2.489,-0.055 1.242,-0.049 0,0 m 5.763,-0.004 c 0.4,0.733 0.716,1.44 0.775,2.236 C 6.595,3.02 6.481,3.772 6.142,4.488 5.799,5.211 5.303,5.807 4.667,6.286 3.091,7.476 0.943,7.616 -0.624,6.494 -3.002,4.792 -3.281,2.557 -2.06,0.008 c -0.148,-0.01 -0.293,-0.021 -0.432,-0.03 v -3.849 h 13.081 v 3.867 z"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,7.6522619,290.76894)"
id="g112">
<path
id="path114"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 1.673,1.627 1.79,4.392 0.265,6.199 0.203,6.273 0.145,6.352 0.038,6.486 h 0.88 v 3.858 H -7.753 V 6.501 c 0.128,-0.007 0.248,-0.019 0.368,-0.018 1.708,0.002 3.415,0.013 5.122,0.003 0.276,-0.002 0.575,-0.045 0.82,-0.158 0.777,-0.36 1.186,-1.329 0.972,-2.205 -0.203,-0.832 -0.886,-1.35 -1.787,-1.35 H -7.409 -7.74 v -3.868 c 0.048,-0.009 0.075,-0.018 0.102,-0.018 1.614,0 3.227,-0.019 4.839,0.008 1.06,0.017 2.02,0.348 2.799,1.105"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,8.3449716,290.81916)"
id="g116">
<path
id="path118"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 1.046,0.037 1.942,0.512 2.638,1.314 4.101,3.004 4.11,5.552 2.665,7.268 2.601,7.343 2.538,7.418 2.419,7.561 H 3.33 v 3.868 h -8.667 v -3.87 h 0.388 c 1.726,0.002 3.453,0.002 5.179,0.005 0.363,0 0.688,-0.097 0.978,-0.312 C 1.875,6.754 2.155,5.846 1.888,5.049 1.626,4.268 1.006,3.848 0.108,3.846 c -1.697,0 -3.395,0 -5.093,-10e-4 C -5.104,3.844 -5.222,3.83 -5.337,3.822 v -3.837 c 0.058,-0.01 0.094,-0.023 0.131,-0.023 C -3.471,-0.031 -1.733,-0.061 0,0"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,8.7863471,290.83871)"
id="g120">
<path
id="path122"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 0.029 c -0.745,0 -1.491,-0.033 -2.234,0.008 -0.991,0.057 -1.624,0.767 -1.587,1.701 0.029,0.736 0.595,1.336 1.404,1.474 0.222,0.038 0.449,0.056 0.675,0.056 1.161,0.005 2.32,0.005 3.48,-0.002 C 1.982,3.265 2.23,3.247 2.469,3.197 3.325,3.016 3.874,2.35 3.832,1.569 3.787,0.741 3.153,0.121 2.262,0.031 2.131,0.018 1.999,0.002 1.867,0.002 1.244,-0.002 0.622,0 0,0 M 3.417,-2.502 C 5.386,-0.238 5.358,3.506 3.357,5.771 1.523,7.85 -1.442,7.885 -3.313,5.84 -4.408,4.643 -4.882,3.205 -4.896,1.699 c 0.007,-1.582 0.424,-2.926 1.363,-4.086 1.87,-2.308 5.001,-2.357 6.95,-0.115"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,7.9732969,290.81294)"
id="g124">
<path
id="path126"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="M 0,0 C 0,0.669 0.012,1.338 -0.006,2.008 -0.012,2.264 0.073,2.342 0.319,2.314 0.627,2.277 0.943,2.295 1.246,2.236 2.02,2.086 2.555,1.415 2.55,0.645 2.545,-0.133 1.982,-0.811 1.196,-0.937 0.819,-0.998 0.433,-0.998 0,-1.029 Z M 1.818,-3.759 C 2.904,-2.672 3.463,-1.34 3.571,0.183 3.697,1.963 3.24,3.566 2.048,4.92 1.251,5.823 0.254,6.383 -0.967,6.467 -2.552,6.576 -3.83,5.939 -4.793,4.723 -6.229,2.906 -6.516,0.842 -5.858,-1.342 c 0.459,-1.523 1.379,-2.711 2.86,-3.398 0.113,-0.053 0.234,-0.086 0.355,-0.129 v 3.844 c -0.358,0.027 -0.697,0.033 -1.032,0.081 -0.823,0.117 -1.405,0.739 -1.433,1.506 -0.032,0.838 0.453,1.54 1.299,1.665 0.803,0.117 1.628,0.086 2.488,0.123 v -7.455 c 0.142,0 0.244,-0.01 0.344,0 1.094,0.111 2.025,0.574 2.795,1.346"
inkscape:connector-curvature="0" />
</g>
<g
transform="matrix(0,-0.02089351,-0.02089351,0,7.8475264,290.72222)"
id="g128">
<path
id="path130"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none"
d="m 0,0 v 2.109 h 1.748 v 3.942 h -1.751 c 0,0.128 0.001,0.229 0,0.33 C -0.004,6.9 0.001,7.419 -0.014,7.937 -0.016,8.021 -0.101,8.17 -0.156,8.173 -0.52,8.193 -0.887,8.184 -1.283,8.184 V 6.035 H -9.981 V 2.102 h 8.706 V 0 Z"
inkscape:connector-curvature="0" />
</g>
<path
id="path132"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.02089351"
d="m 7.3891019,290.93085 v -0.18126 h -0.081297 v 0.18126 z"
inkscape:connector-curvature="0" />
<path
id="path134"
style="fill:#cd3332;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.02089351"
d="m 7.3074291,290.65749 v 0.0545 h 0.081652 v -0.0545 z"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,17 @@
<theme>
<variables>
<systemName>Open Beats of Rage</systemName>
<systemDescription>Beats of Rage is a fan-made tribute game to Sega's Streets of Rage series. It supplants the original graphics and characters with resources taken from The King of Fighters series, albeit with tongue-in-cheek renames. Originally developed by Senile Team, the underlying engine powering Beats of Rage later went on to become the Open Beats of Rage (OpenBOR) game engine project.</systemDescription>
<systemManufacturer>Senile Team</systemManufacturer>
<systemReleaseYear>2003</systemReleaseYear>
<systemReleaseDate>2003-11</systemReleaseDate>
<systemReleaseDateFormated>November 2003</systemReleaseDateFormated>
<systemHardwareType>Engine</systemHardwareType>
<systemCoverSize>1-1</systemCoverSize>
<systemColor>8BA7AE</systemColor>
<systemColorPalette1>E17930</systemColorPalette1>
<systemColorPalette2>407AC0</systemColorPalette2>
<systemColorPalette3>EBE470</systemColorPalette3>
<systemColorPalette4>404040</systemColorPalette4>
</variables>
</theme>

View file

@ -0,0 +1,23 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_wildmatch_h__
#define INCLUDE_wildmatch_h__
#include "git2_util.h"
#define WM_CASEFOLD 1
#define WM_PATHNAME 2
#define WM_NOMATCH 1
#define WM_MATCH 0
#define WM_ABORT_ALL -1
#define WM_ABORT_TO_STARSTAR -2
int wildmatch(const char *pattern, const char *text, unsigned int flags);
#endif

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 3840 1138" style="enable-background:new 0 0 3840 1138;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0097D7;}
.st1{fill:url(#SVGID_1_);}
.st2{fill:url(#SVGID_2_);}
.st3{fill:#F261C7;}
.st4{fill:#FFFFFF;}
.st5{fill:url(#SVGID_3_);}
.st6{fill:url(#SVGID_4_);}
</style>
<g>
<g>
<g>
<path class="st4" d="M2683.7,525.8H2434c-62.5,0-122.2,50.7-133.2,113.2l-61.5,347.5c-11.1,62.6,30.7,113.3,93.3,113.3h250.2
c62.6,0,122.3-50.8,133.3-113.4l61-347.5C2788,576.5,2746.2,525.8,2683.7,525.8z M2566.2,1017h-187.3
c-34.3,0-57.2-27.8-51.2-62.1l50.2-284.6c6-34.3,38.8-62.1,73.1-62.1h187.3c34.3,0,57.2,27.8,51.2,62.1l-50.2,284.6
C2633.2,989.2,2600.5,1017,2566.2,1017z"/>
<path class="st4" d="M3214.3,525.8h-249.7c-62.5,0-122.2,50.7-133.2,113.2l-61.5,347.5c-11.1,62.6,30.7,113.3,93.3,113.3h250.2
c62.6,0,122.3-50.8,133.3-113.4l61-347.5C3318.6,576.5,3276.8,525.8,3214.3,525.8z M3096.8,1017h-187.3
c-34.3,0-57.2-27.8-51.2-62.1l50.2-284.6c6-34.3,38.8-62.1,73.1-62.1h187.3c34.3,0,57.2,27.8,51.2,62.1l-50.2,284.6
C3163.8,989.2,3131.1,1017,3096.8,1017z"/>
<path class="st4" d="M3744.9,525.8h-249.7c-62.5,0-122.2,50.7-133.2,113.2l-61.5,347.5c-11.1,62.6,30.7,113.3,93.3,113.3H3644
c62.6,0,122.3-50.8,133.3-113.4l61-347.5C3849.2,576.5,3807.5,525.8,3744.9,525.8z M3627.4,1017h-187.3
c-34.3,0-57.2-27.8-51.2-62.1l50.2-284.6c6-34.3,38.8-62.1,73.1-62.1h187.3c34.3,0,57.2,27.8,51.2,62.1l-50.2,284.6
C3694.4,989.2,3661.7,1017,3627.4,1017z"/>
<path class="st4" d="M2189.2,812.7c19.9-19.7,34.6-44.7,39.5-72.3l17.7-101.9c11-62.5-30.8-113.2-93.3-113.2h-249.7
c-62.5,0-122.2,50.7-133.2,113.2L1752,740.4c-4.9,27.6,1,52.6,13.9,72.3c-19.7,19.6-34.3,44.5-39.2,71.9l-18.2,101.9
c-11.1,62.6,30.7,113.4,93.3,113.4H2052c62.6,0,122.3-50.8,133.3-113.4l17.7-101.9C2207.8,857.1,2202,832.3,2189.2,812.7z
M1847.3,669.7c6-34.3,38.8-62.1,73.1-62.1h187.3c34.3,0,57.2,27.8,51.2,62.1l-6.9,39c-6,34.3-38.8,62.1-73.1,62.1h-187.3
c-34.3,0-57.2-27.8-51.2-62.1L1847.3,669.7z M2108.6,954.9c-6,34.3-38.8,62.1-73.1,62.1h-187.3c-34.3,0-57.2-27.8-51.2-62.1
l6.9-39c6-34.3,38.8-62.1,73.1-62.1h187.3c34.3,0,57.2,27.8,51.2,62.1L2108.6,954.9z"/>
<path class="st4" d="M1579,771.4h-249.7c-10.6,0-21,1.9-31.2,4.7l18.7-105.8c6.1-34.3,38.8-62.1,73.1-62.1h187.3
c34.3,0,57.2,27.8,51.2,62.1l-8.5,48.3h82.1l14-79.6c11-62.5-30.8-113.2-93.3-113.2h-249.7c-62.5,0-122.2,50.7-133.2,113.2
l-43.3,244.5c-0.1,0.4-0.2,0.7-0.3,1.1l-18.2,101.9c-11.1,62.6,30.7,113.4,93.3,113.4h250.2c62.6,0,122.3-50.8,133.3-113.4
l17.7-101.9C1683.3,822.1,1641.5,771.4,1579,771.4z M1577.9,954.9c-6,34.3-38.8,62.1-73.1,62.1h-187.3c-29.5,0-49.3-21-50.8-48.6
c0.1-0.1,0.2-0.2,0.3-0.3c-0.2-4.4-1.2-8.6-0.3-13.3l7.1-40.3c6.7-33.7,38.7-60.8,72.6-60.8h187.3c34.3,0,57.2,27.8,51.2,62.1
L1577.9,954.9z"/>
<path class="st4" d="M305.8,832.2L0,1138h482.4L305.8,832.2z M294,921.7l93.1,161.4H132.7L294,921.7z"/>
<path class="st4" d="M673.5,487.7H157L532.5,1138H1049L673.5,487.7z M252.2,542.6h389.6l312,540.5H564.2L252.2,542.6z"/>
<path class="st4" d="M723.6,487.7l176.6,305.8L1206,487.7H723.6z M818.8,542.6h254.5L911.9,704L818.8,542.6z"/>
</g>
<g>
<g id="g9277_22_" transform="matrix(0,1.5459704,1.5459704,0,415.67057,649.33146)">
<path id="path9279_22_" class="st4" d="M-331.1,719.7V578.6h-82.1v-72.9h214.7v72.9h-86.3v141.1h86.3v72.9h-214.7v-72.9H-331.1"
/>
</g>
<g id="g9281_22_" transform="matrix(0,1.5459704,1.5459704,0,451.89266,657.95179)">
<path id="path9283_22_" class="st4" d="M-290.3,890.9l-83.4,50.8l83.4,49.2V890.9 M-418.7,913.4l214.7-130.8v55.7l-43.9,26.7
v150.8l43.9,26v89l-214.7-130.7V913.4"/>
</g>
<g id="g9285_22_" transform="matrix(0,1.5459704,1.5459704,0,550.35088,651.36905)">
<path id="path9287_22_" class="st4" d="M-321.4,1356.5c-22.8,17.4-56.1,15-75.2-18.3c-17.8-31.1-24.4-90.4-24.4-127.5
c0-59.3,4-97.5,9.6-129.9h211.6v72.9h-179.5c-5.2,26.3-5.3,52.9-4.9,62.9c1.3,28.9,5.8,45.2,15,58.2
c9.6,13.5,30.8,17.1,45.5-0.3c11-13.1,19.6-39.6,10.6-98.9l13.8-8.4l99.5,112.1v99.3l-86.3-99.7
C-289.1,1302.8-298.7,1339.1-321.4,1356.5"/>
</g>
<g id="g9289_22_" transform="matrix(0,1.5459704,1.5459704,0,346.11736,647.86124)">
<path id="path9291_22_" class="st4" d="M-338,390.8c-8.2-42.1-13.3-77.9-26.9-77.9c-15.1,0-19,28.9-14.7,69.9
c4.1,38.8,14.3,75.3,28.8,109.4l-42.5,25.9c-10.5-27.6-23.9-84.4-25.5-135.9c-1.6-56.5,3.4-151.9,60.6-156
c52.3-3.8,64.8,70.8,76.2,119.6c11.1,47.7,15.1,92.3,31.6,92.3c11.6,0,20.7-15.7,17.5-57.4c-3.7-50.1-17.4-92.8-38.6-135.4
l46.4-28.3c18.4,47.2,33.3,109.1,34.2,164.9c1.1,66.3-9.6,141.2-66.4,142.9C-304.7,526.3-321.2,477.2-338,390.8"/>
</g>
<g id="g9293_22_" transform="matrix(0,1.5459704,1.5459704,0,594.18532,651.0413)">
<path id="path9295_22_" class="st4" d="M-323,1563.7c10.3-12.6,14-31,13.9-60.1c-0.1-21.4-4-43.6-8.1-61.7h-61.9
c-5.2,26.2-5.3,53.4-4.9,63.3c1.2,29.1,6.2,46.1,15,58.7C-359.7,1577.2-337.6,1581.6-323,1563.7 M-396.4,1627.5
c-17.6-29.7-24.4-85.3-24.4-127.9c0-59.3,4-97.9,9.6-130.4h211.6v72.9h-77.5c3.8,22.5,5.9,50.8,5.8,75.2
c-0.5,59.7-14.5,104-36.5,124.2C-339.1,1670.2-376.9,1660.5-396.4,1627.5"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -0,0 +1,168 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Capa_1"
x="0px"
y="0px"
viewBox="0 0 691.73036 499.99999"
xml:space="preserve"
sodipodi:docname="keyboard-mouse.svg"
width="500"
height="500"
fill="#e60012"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"><metadata
id="metadata41"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
<defs
id="defs39"/>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2338"
inkscape:window-height="1185"
id="namedview37"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="1.0928937"
inkscape:cx="38.559338"
inkscape:cy="210.07449"
inkscape:window-x="3401"
inkscape:window-y="94"
inkscape:window-maximized="0"
inkscape:current-layer="Capa_1"/>
<g
id="g6"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g8"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g10"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g12"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g14"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g16"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g18"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g20"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g22"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g24"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g26"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g28"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g30"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g32"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g34"
transform="translate(2.4683882e-4,-2.4505093)">
</g>
<g
id="g921"
transform="matrix(0.02722698,-0.0157195,0.0157195,0.02722698,23.328539,-1.6306872)"><g
id="g946"
transform="matrix(16.001044,0,0,16.001044,10141.923,8423.1835)"><g
id="g4"
transform="matrix(27.54621,15.903807,-15.903807,27.54621,-629.56773,-393.59167)">
<path
d="M 28.878,14.443 21.159,1.789 C 21.09,1.676 20.939,1.639 20.826,1.71 L 10.865,7.784 C 10.717,7.701 10.452,7.513 10.382,7.213 10.291,6.812 10.555,6.265 11.147,5.632 11.94,4.783 12.286,3.944 12.171,3.137 12.015,2.057 11.08,1.491 11.04,1.467 l -0.496,0.837 c 0.005,0.004 0.575,0.356 0.664,0.971 0.07,0.499 -0.188,1.07 -0.771,1.694 C 9.601,5.86 9.264,6.689 9.434,7.432 9.526,7.829 9.749,8.119 9.977,8.326 l -9.861,6.018 c -0.055,0.035 -0.094,0.087 -0.109,0.148 -0.016,0.063 -0.005,0.131 0.028,0.186 l 7.722,12.653 c 0.044,0.073 0.124,0.115 0.207,0.115 0.042,0 0.086,-0.012 0.125,-0.037 L 28.797,14.777 c 0.114,-0.071 0.15,-0.22 0.081,-0.334 z M 23.526,10.507 21.371,11.821 20.055,9.665 22.212,8.351 Z M 20.005,4.733 21.319,6.889 19.164,8.204 17.85,6.048 Z m -0.085,7.971 -2.155,1.316 -1.314,-2.156 2.154,-1.315 z m -3.52,-5.77 1.315,2.154 -2.156,1.316 -1.315,-2.155 z m -0.249,8.069 -2.153,1.316 -1.315,-2.156 2.155,-1.315 z M 13.947,11.387 11.791,12.7 10.477,10.547 12.632,9.232 Z m -1.448,5.847 -2.156,1.315 -1.314,-2.156 2.152,-1.315 z M 8.977,11.463 10.291,13.617 8.137,14.93 6.82,12.777 Z m -5.794,3.535 2.154,-1.315 1.314,2.156 -2.154,1.313 z m 2.204,3.617 2.156,-1.316 1.313,2.156 -2.154,1.314 z m 3.342,5.646 -1.276,-2.095 9.674,-5.9 1.276,2.093 z m 11.137,-6.796 -1.314,-2.155 2.156,-1.316 1.314,2.156 z m 3.607,-2.199 -1.315,-2.155 2.156,-1.316 1.313,2.156 z"
id="path2"/>
</g><path
d="m 245.435,130.52 c -11.585,-7.572 -26.943,-12.411 -42.943,-14.045 v -48.49 h 28.811 c 8.102,0 15.642,-3.313 21.232,-9.113 5.589,-5.8 8.503,-13.513 8.203,-21.61 L 259.895,14.46 C 259.589,6.182 252.635,-0.285 244.35,0.011 236.072,0.318 229.609,7.388 229.915,15.667 l 0.822,22.319 H 202.14 c -16.542,0 -29.648,13.221 -29.648,29.763 v 48.728 c -17,1.634 -31.358,6.474 -42.942,14.045 -17.022,11.124 -26.058,27.366 -26.058,46.968 v 135.435 c 0,19.751 7.636,36.148 22.345,47.016 13.133,9.705 31.099,15.046 52.215,15.046 h 18.178 c 21.117,0 39.433,-5.341 52.566,-15.046 14.708,-10.868 22.696,-27.265 22.696,-47.016 V 177.488 c 0,-19.602 -9.034,-35.844 -26.057,-46.968 z m -38.943,80.465 c 0,11.598 -9.402,21 -21,21 -11.598,0 -21,-9.402 -21,-21 v -39 c 0,-11.598 9.402,-21 21,-21 11.598,0 21,9.402 21,21 z"
id="path866"/></g>
<g
id="g868">
</g>
<g
id="g870">
</g>
<g
id="g872">
</g>
<g
id="g874">
</g>
<g
id="g876">
</g>
<g
id="g878">
</g>
<g
id="g880">
</g>
<g
id="g882">
</g>
<g
id="g884">
</g>
<g
id="g886">
</g>
<g
id="g888">
</g>
<g
id="g890">
</g>
<g
id="g892">
</g>
<g
id="g894">
</g>
<g
id="g896">
</g></g></svg>

After

Width:  |  Height:  |  Size: 6.3 KiB

View file

@ -0,0 +1,384 @@
/* poppler-media.cc: glib interface to MediaRendition
*
* Copyright (C) 2010 Carlos Garcia Campos <carlosgc@gnome.org>
*
* 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "config.h"
#include <cerrno>
#include <goo/gfile.h>
#include "poppler-media.h"
#include "poppler-private.h"
/**
* SECTION: poppler-media
* @short_description: Media
* @title: PopplerMedia
*/
typedef struct _PopplerMediaClass PopplerMediaClass;
struct _PopplerMedia
{
GObject parent_instance;
gchar *filename;
gboolean auto_play;
gboolean show_controls;
gfloat repeat_count;
gchar *mime_type;
Object stream;
};
struct _PopplerMediaClass
{
GObjectClass parent_class;
};
G_DEFINE_TYPE(PopplerMedia, poppler_media, G_TYPE_OBJECT)
static void poppler_media_finalize(GObject *object)
{
PopplerMedia *media = POPPLER_MEDIA(object);
if (media->filename) {
g_free(media->filename);
media->filename = nullptr;
}
if (media->mime_type) {
g_free(media->mime_type);
media->mime_type = nullptr;
}
media->stream = Object();
G_OBJECT_CLASS(poppler_media_parent_class)->finalize(object);
}
static void poppler_media_class_init(PopplerMediaClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
gobject_class->finalize = poppler_media_finalize;
}
static void poppler_media_init(PopplerMedia *media) { }
PopplerMedia *_poppler_media_new(const MediaRendition *poppler_media)
{
PopplerMedia *media;
g_assert(poppler_media != nullptr);
media = POPPLER_MEDIA(g_object_new(POPPLER_TYPE_MEDIA, nullptr));
if (poppler_media->getIsEmbedded()) {
const GooString *mime_type;
media->stream = poppler_media->getEmbbededStreamObject()->copy();
mime_type = poppler_media->getContentType();
if (mime_type) {
media->mime_type = g_strdup(mime_type->c_str());
}
} else {
media->filename = g_strdup(poppler_media->getFileName()->c_str());
}
const MediaParameters *mp = poppler_media->getBEParameters();
mp = mp ? mp : poppler_media->getMHParameters();
media->auto_play = mp ? mp->autoPlay : false;
media->show_controls = mp ? mp->showControls : false;
media->repeat_count = mp ? mp->repeatCount : 1.f;
return media;
}
/**
* poppler_media_get_filename:
* @poppler_media: a #PopplerMedia
*
* Returns the media clip filename, in case of non-embedded media. filename might be
* a local relative or absolute path or a URI
*
* Return value: a filename, return value is owned by #PopplerMedia and should not be freed
*
* Since: 0.14
*/
const gchar *poppler_media_get_filename(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), NULL);
g_return_val_if_fail(!poppler_media->stream.isStream(), NULL);
return poppler_media->filename;
}
/**
* poppler_media_is_embedded:
* @poppler_media: a #PopplerMedia
*
* Whether the media clip is embedded in the PDF. If the result is %TRUE, the embedded stream
* can be saved with poppler_media_save() or poppler_media_save_to_callback() function.
* If the result is %FALSE, the media clip filename can be retrieved with
* poppler_media_get_filename() function.
*
* Return value: %TRUE if media clip is embedded, %FALSE otherwise
*
* Since: 0.14
*/
gboolean poppler_media_is_embedded(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
return poppler_media->stream.isStream();
}
/**
* poppler_media_get_auto_play:
* @poppler_media: a #PopplerMedia
*
* Returns the auto-play parameter.
*
* Return value: %TRUE if media should auto-play, %FALSE otherwise
*
* Since: 20.04.0
*/
gboolean poppler_media_get_auto_play(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
return poppler_media->auto_play;
}
/**
* poppler_media_get_show_controls:
* @poppler_media: a #PopplerMedia
*
* Returns the show controls parameter.
*
* Return value: %TRUE if media should show controls, %FALSE otherwise
*
* Since: 20.04.0
*/
gboolean poppler_media_get_show_controls(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
return poppler_media->show_controls;
}
/**
* poppler_media_get_repeat_count:
* @poppler_media: a #PopplerMedia
*
* Returns the repeat count parameter.
*
* Return value: Repeat count parameter (float)
*
* Since: 20.04.0
*/
gfloat poppler_media_get_repeat_count(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
return poppler_media->repeat_count;
}
/**
* poppler_media_get_mime_type:
* @poppler_media: a #PopplerMedia
*
* Returns the media clip mime-type
*
* Return value: the mime-type, return value is owned by #PopplerMedia and should not be freed
*
* Since: 0.14
*/
const gchar *poppler_media_get_mime_type(PopplerMedia *poppler_media)
{
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), NULL);
return poppler_media->mime_type;
}
static gboolean save_helper(const gchar *buf, gsize count, gpointer data, GError **error)
{
FILE *f = (FILE *)data;
gsize n;
n = fwrite(buf, 1, count, f);
if (n != count) {
int errsv = errno;
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errsv), "Error writing to media file: %s", g_strerror(errsv));
return FALSE;
}
return TRUE;
}
/**
* poppler_media_save:
* @poppler_media: a #PopplerMedia
* @filename: name of file to save
* @error: (allow-none): return location for error, or %NULL.
*
* Saves embedded stream of @poppler_media to a file indicated by @filename.
* If @error is set, %FALSE will be returned.
* Possible errors include those in the #G_FILE_ERROR domain
* and whatever the save function generates.
*
* Return value: %TRUE, if the file successfully saved
*
* Since: 0.14
*/
gboolean poppler_media_save(PopplerMedia *poppler_media, const char *filename, GError **error)
{
gboolean result;
FILE *f;
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
g_return_val_if_fail(poppler_media->stream.isStream(), FALSE);
f = openFile(filename, "wb");
if (f == nullptr) {
gchar *display_name = g_filename_display_name(filename);
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno), "Failed to open '%s' for writing: %s", display_name, g_strerror(errno));
g_free(display_name);
return FALSE;
}
result = poppler_media_save_to_callback(poppler_media, save_helper, f, error);
if (fclose(f) < 0) {
gchar *display_name = g_filename_display_name(filename);
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errno), "Failed to close '%s', all data may not have been saved: %s", display_name, g_strerror(errno));
g_free(display_name);
return FALSE;
}
return result;
}
#ifndef G_OS_WIN32
/**
* poppler_media_save_to_fd:
* @poppler_media: a #PopplerMedia
* @fd: a valid file descriptor open for writing
* @error: (allow-none): return location for error, or %NULL.
*
* Saves embedded stream of @poppler_media to a file referred to by @fd.
* If @error is set, %FALSE will be returned.
* Possible errors include those in the #G_FILE_ERROR domain
* and whatever the save function generates.
* Note that this function takes ownership of @fd; you must not operate on it
* again, nor close it.
*
* Return value: %TRUE, if the file successfully saved
*
* Since: 21.12.0
*/
gboolean poppler_media_save_to_fd(PopplerMedia *poppler_media, int fd, GError **error)
{
gboolean result;
FILE *f;
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
g_return_val_if_fail(poppler_media->stream.isStream(), FALSE);
f = fdopen(fd, "wb");
if (f == nullptr) {
int errsv = errno;
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errsv), "Failed to open FD %d for writing: %s", fd, g_strerror(errsv));
close(fd);
return FALSE;
}
result = poppler_media_save_to_callback(poppler_media, save_helper, f, error);
if (fclose(f) < 0) {
int errsv = errno;
g_set_error(error, G_FILE_ERROR, g_file_error_from_errno(errsv), "Failed to close FD %d, all data may not have been saved: %s", fd, g_strerror(errsv));
return FALSE;
}
return result;
}
#endif /* !G_OS_WIN32 */
#define BUF_SIZE 1024
/**
* poppler_media_save_to_callback:
* @poppler_media: a #PopplerMedia
* @save_func: (scope call): a function that is called to save each block of data that the save routine generates.
* @user_data: user data to pass to the save function.
* @error: (allow-none): return location for error, or %NULL.
*
* Saves embedded stream of @poppler_media by feeding the produced data to @save_func. Can be used
* when you want to store the media clip stream to something other than a file, such as
* an in-memory buffer or a socket. If @error is set, %FALSE will be
* returned. Possible errors include those in the #G_FILE_ERROR domain and
* whatever the save function generates.
*
* Return value: %TRUE, if the save successfully completed
*
* Since: 0.14
*/
gboolean poppler_media_save_to_callback(PopplerMedia *poppler_media, PopplerMediaSaveFunc save_func, gpointer user_data, GError **error)
{
Stream *stream;
gchar buf[BUF_SIZE];
int i;
gboolean eof_reached = FALSE;
g_return_val_if_fail(POPPLER_IS_MEDIA(poppler_media), FALSE);
g_return_val_if_fail(poppler_media->stream.isStream(), FALSE);
stream = poppler_media->stream.getStream();
stream->reset();
do {
int data;
for (i = 0; i < BUF_SIZE; i++) {
data = stream->getChar();
if (data == EOF) {
eof_reached = TRUE;
break;
}
buf[i] = data;
}
if (i > 0) {
if (!(save_func)(buf, i, user_data, error)) {
stream->close();
return FALSE;
}
}
} while (!eof_reached);
stream->close();
return TRUE;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<svg id="Ebene_1" enable-background="new 0 0 566.929 87.964" height="70.468" viewBox="0 0 343.64012 70.467654" width="343.64" version="1.1" y="0px" x="0px" xmlns="http://www.w3.org/2000/svg">
<path id="path3999-4" d="M 273.133 70.468 L 301.309 70.468 L 343.64 0 L 315.474 0 L 273.131 70.468" style="fill: rgb(255, 255, 255);"/>
<path id="path3912-8" stroke-linejoin="miter" d="M 110.587 19.225 L 110.587 57.623 L 133.626 57.623 C 140.793 56.448 144.892 52.433 146.451 46.104 C 146.465 40.98 146.453 35.869 146.451 30.745 C 144.892 24.416 140.793 20.401 133.626 19.226 L 110.587 19.226 Z M 119.598 26.93 L 129.812 26.93 C 133.02 27.499 136.064 28.505 137.517 33.33 L 137.492 43.569 C 136.026 48.387 132.994 49.4 129.786 49.969 L 119.572 49.969 L 119.598 26.93 Z" stroke-linecap="butt" stroke-width="1.11043465000000000px" style="fill: rgb(255, 255, 255);"/>
<path id="path3896" stroke-linejoin="miter" d="M 11.993 57.631 L 11.993 28.202 L 0.466 28.202 L 0.463 19.245 L 36.325 19.245 L 32.481 28.202 L 23.516 28.206 L 23.516 57.631 L 11.993 57.631" stroke-linecap="butt" stroke-width="1.11043465000000000px" style="fill: rgb(255, 255, 255);"/>
<path id="path3900" stroke-linejoin="miter" d="M 40.164 19.25 L 26.085 57.623 L 37.63 57.623 L 42.084 43.57 L 46.564 49.969 L 54.244 49.969 L 56.803 57.623 L 68.426 57.623 L 54.244 19.251 L 40.165 19.251 Z M 47.153 29.464 L 51.684 41.01 L 42.724 41.01 L 47.152 29.464 Z" stroke-linecap="butt" stroke-width="1.11043465000000000px" style="fill: rgb(255, 255, 255);"/>
<path id="path3908" stroke-linejoin="miter" d="M 69.594 57.631 L 69.594 19.245 L 83.704 19.245 L 97.789 47.408 L 97.789 19.245 L 106.754 19.245 L 106.747 57.631 L 92.664 57.631 L 78.577 29.492 L 78.573 57.631 L 69.594 57.631" stroke-linecap="butt" stroke-width="1.11043465000000000px" style="fill: rgb(255, 255, 255);"/>
<path id="path3991" stroke-linejoin="miter" d="M 156.681 39.74 L 141.325 19.245 L 152.842 19.245 L 161.193 32.022 L 169.504 19.245 L 182.287 19.245 L 166.883 39.676 L 166.911 57.631 L 156.691 57.631 L 156.681 39.74" stroke-linecap="butt" stroke-width="1.11043465000000000px" style="fill: rgb(255, 255, 255);"/>
<path id="path3999-4-5" d="M 236.148 70.468 L 264.324 70.468 L 306.65 0 L 278.479 0 L 236.145 70.468" style="fill: rgb(255, 255, 255);"/>
<path id="path3999-4-5-7" d="M 199.155 70.468 L 227.331 70.468 L 269.657 0 L 241.491 0 L 199.148 70.468" style="fill: rgb(255, 255, 255);"/>
<text id="text4074" style="fill: rgb(255, 255, 255); font-family: &quot;Open Sans Light&quot;; font-size: 40px; white-space: pre;"/>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

@ -0,0 +1,641 @@
/*************************************************
* Perl-Compatible Regular Expressions *
*************************************************/
/* This is the public header file for the PCRE library, to be #included by
applications that call the PCRE functions.
Copyright (c) 1997-2014 University of Cambridge
-----------------------------------------------------------------------------
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the University of Cambridge nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
-----------------------------------------------------------------------------
*/
#ifndef _PCRE_H
#define _PCRE_H
/* The current PCRE version information. */
#define PCRE_MAJOR 8
#define PCRE_MINOR 44
#define PCRE_PRERELEASE
#define PCRE_DATE 2020-02-12
#define PCRE_EXP_DECL extern
/* Have to include stdlib.h in order to ensure that size_t is defined;
it is needed here for malloc. */
#include <stdlib.h>
/* Allow for C++ users */
#ifdef __cplusplus
extern "C" {
#endif
/* Public options. Some are compile-time only, some are run-time only, and some
are both. Most of the compile-time options are saved with the compiled regex so
that they can be inspected during studying (and therefore JIT compiling). Note
that pcre_study() has its own set of options. Originally, all the options
defined here used distinct bits. However, almost all the bits in a 32-bit word
are now used, so in order to conserve them, option bits that were previously
only recognized at matching time (i.e. by pcre_exec() or pcre_dfa_exec()) may
also be used for compile-time options that affect only compiling and are not
relevant for studying or JIT compiling.
Some options for pcre_compile() change its behaviour but do not affect the
behaviour of the execution functions. Other options are passed through to the
execution functions and affect their behaviour, with or without affecting the
behaviour of pcre_compile().
Options that can be passed to pcre_compile() are tagged Cx below, with these
variants:
C1 Affects compile only
C2 Does not affect compile; affects exec, dfa_exec
C3 Affects compile, exec, dfa_exec
C4 Affects compile, exec, dfa_exec, study
C5 Affects compile, exec, study
Options that can be set for pcre_exec() and/or pcre_dfa_exec() are flagged with
E and D, respectively. They take precedence over C3, C4, and C5 settings passed
from pcre_compile(). Those that are compatible with JIT execution are flagged
with J. */
#define PCRE_CASELESS 0x00000001 /* C1 */
#define PCRE_MULTILINE 0x00000002 /* C1 */
#define PCRE_DOTALL 0x00000004 /* C1 */
#define PCRE_EXTENDED 0x00000008 /* C1 */
#define PCRE_ANCHORED 0x00000010 /* C4 E D */
#define PCRE_DOLLAR_ENDONLY 0x00000020 /* C2 */
#define PCRE_EXTRA 0x00000040 /* C1 */
#define PCRE_NOTBOL 0x00000080 /* E D J */
#define PCRE_NOTEOL 0x00000100 /* E D J */
#define PCRE_UNGREEDY 0x00000200 /* C1 */
#define PCRE_NOTEMPTY 0x00000400 /* E D J */
#define PCRE_UTF8 0x00000800 /* C4 ) */
#define PCRE_UTF16 0x00000800 /* C4 ) Synonyms */
#define PCRE_UTF32 0x00000800 /* C4 ) */
#define PCRE_NO_AUTO_CAPTURE 0x00001000 /* C1 */
#define PCRE_NO_UTF8_CHECK 0x00002000 /* C1 E D J ) */
#define PCRE_NO_UTF16_CHECK 0x00002000 /* C1 E D J ) Synonyms */
#define PCRE_NO_UTF32_CHECK 0x00002000 /* C1 E D J ) */
#define PCRE_AUTO_CALLOUT 0x00004000 /* C1 */
#define PCRE_PARTIAL_SOFT 0x00008000 /* E D J ) Synonyms */
#define PCRE_PARTIAL 0x00008000 /* E D J ) */
/* This pair use the same bit. */
#define PCRE_NEVER_UTF 0x00010000 /* C1 ) Overlaid */
#define PCRE_DFA_SHORTEST 0x00010000 /* D ) Overlaid */
/* This pair use the same bit. */
#define PCRE_NO_AUTO_POSSESS 0x00020000 /* C1 ) Overlaid */
#define PCRE_DFA_RESTART 0x00020000 /* D ) Overlaid */
#define PCRE_FIRSTLINE 0x00040000 /* C3 */
#define PCRE_DUPNAMES 0x00080000 /* C1 */
#define PCRE_NEWLINE_CR 0x00100000 /* C3 E D */
#define PCRE_NEWLINE_LF 0x00200000 /* C3 E D */
#define PCRE_NEWLINE_CRLF 0x00300000 /* C3 E D */
#define PCRE_NEWLINE_ANY 0x00400000 /* C3 E D */
#define PCRE_NEWLINE_ANYCRLF 0x00500000 /* C3 E D */
#define PCRE_BSR_ANYCRLF 0x00800000 /* C3 E D */
#define PCRE_BSR_UNICODE 0x01000000 /* C3 E D */
#define PCRE_JAVASCRIPT_COMPAT 0x02000000 /* C5 */
#define PCRE_NO_START_OPTIMIZE 0x04000000 /* C2 E D ) Synonyms */
#define PCRE_NO_START_OPTIMISE 0x04000000 /* C2 E D ) */
#define PCRE_PARTIAL_HARD 0x08000000 /* E D J */
#define PCRE_NOTEMPTY_ATSTART 0x10000000 /* E D J */
#define PCRE_UCP 0x20000000 /* C3 */
/* Exec-time and get/set-time error codes */
#define PCRE_ERROR_NOMATCH (-1)
#define PCRE_ERROR_NULL (-2)
#define PCRE_ERROR_BADOPTION (-3)
#define PCRE_ERROR_BADMAGIC (-4)
#define PCRE_ERROR_UNKNOWN_OPCODE (-5)
#define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */
#define PCRE_ERROR_NOMEMORY (-6)
#define PCRE_ERROR_NOSUBSTRING (-7)
#define PCRE_ERROR_MATCHLIMIT (-8)
#define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */
#define PCRE_ERROR_BADUTF8 (-10) /* Same for 8/16/32 */
#define PCRE_ERROR_BADUTF16 (-10) /* Same for 8/16/32 */
#define PCRE_ERROR_BADUTF32 (-10) /* Same for 8/16/32 */
#define PCRE_ERROR_BADUTF8_OFFSET (-11) /* Same for 8/16 */
#define PCRE_ERROR_BADUTF16_OFFSET (-11) /* Same for 8/16 */
#define PCRE_ERROR_PARTIAL (-12)
#define PCRE_ERROR_BADPARTIAL (-13)
#define PCRE_ERROR_INTERNAL (-14)
#define PCRE_ERROR_BADCOUNT (-15)
#define PCRE_ERROR_DFA_UITEM (-16)
#define PCRE_ERROR_DFA_UCOND (-17)
#define PCRE_ERROR_DFA_UMLIMIT (-18)
#define PCRE_ERROR_DFA_WSSIZE (-19)
#define PCRE_ERROR_DFA_RECURSE (-20)
#define PCRE_ERROR_RECURSIONLIMIT (-21)
#define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */
#define PCRE_ERROR_BADNEWLINE (-23)
#define PCRE_ERROR_BADOFFSET (-24)
#define PCRE_ERROR_SHORTUTF8 (-25)
#define PCRE_ERROR_SHORTUTF16 (-25) /* Same for 8/16 */
#define PCRE_ERROR_RECURSELOOP (-26)
#define PCRE_ERROR_JIT_STACKLIMIT (-27)
#define PCRE_ERROR_BADMODE (-28)
#define PCRE_ERROR_BADENDIANNESS (-29)
#define PCRE_ERROR_DFA_BADRESTART (-30)
#define PCRE_ERROR_JIT_BADOPTION (-31)
#define PCRE_ERROR_BADLENGTH (-32)
#define PCRE_ERROR_UNSET (-33)
/* Specific error codes for UTF-8 validity checks */
#define PCRE_UTF8_ERR0 0
#define PCRE_UTF8_ERR1 1
#define PCRE_UTF8_ERR2 2
#define PCRE_UTF8_ERR3 3
#define PCRE_UTF8_ERR4 4
#define PCRE_UTF8_ERR5 5
#define PCRE_UTF8_ERR6 6
#define PCRE_UTF8_ERR7 7
#define PCRE_UTF8_ERR8 8
#define PCRE_UTF8_ERR9 9
#define PCRE_UTF8_ERR10 10
#define PCRE_UTF8_ERR11 11
#define PCRE_UTF8_ERR12 12
#define PCRE_UTF8_ERR13 13
#define PCRE_UTF8_ERR14 14
#define PCRE_UTF8_ERR15 15
#define PCRE_UTF8_ERR16 16
#define PCRE_UTF8_ERR17 17
#define PCRE_UTF8_ERR18 18
#define PCRE_UTF8_ERR19 19
#define PCRE_UTF8_ERR20 20
#define PCRE_UTF8_ERR21 21
#define PCRE_UTF8_ERR22 22 /* Unused (was non-character) */
/* Specific error codes for UTF-16 validity checks */
#define PCRE_UTF16_ERR0 0
#define PCRE_UTF16_ERR1 1
#define PCRE_UTF16_ERR2 2
#define PCRE_UTF16_ERR3 3
#define PCRE_UTF16_ERR4 4 /* Unused (was non-character) */
/* Specific error codes for UTF-32 validity checks */
#define PCRE_UTF32_ERR0 0
#define PCRE_UTF32_ERR1 1
#define PCRE_UTF32_ERR2 2 /* Unused (was non-character) */
#define PCRE_UTF32_ERR3 3
/* Request types for pcre_fullinfo() */
#define PCRE_INFO_OPTIONS 0
#define PCRE_INFO_SIZE 1
#define PCRE_INFO_CAPTURECOUNT 2
#define PCRE_INFO_BACKREFMAX 3
#define PCRE_INFO_FIRSTBYTE 4
#define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */
#define PCRE_INFO_FIRSTTABLE 5
#define PCRE_INFO_LASTLITERAL 6
#define PCRE_INFO_NAMEENTRYSIZE 7
#define PCRE_INFO_NAMECOUNT 8
#define PCRE_INFO_NAMETABLE 9
#define PCRE_INFO_STUDYSIZE 10
#define PCRE_INFO_DEFAULT_TABLES 11
#define PCRE_INFO_OKPARTIAL 12
#define PCRE_INFO_JCHANGED 13
#define PCRE_INFO_HASCRORLF 14
#define PCRE_INFO_MINLENGTH 15
#define PCRE_INFO_JIT 16
#define PCRE_INFO_JITSIZE 17
#define PCRE_INFO_MAXLOOKBEHIND 18
#define PCRE_INFO_FIRSTCHARACTER 19
#define PCRE_INFO_FIRSTCHARACTERFLAGS 20
#define PCRE_INFO_REQUIREDCHAR 21
#define PCRE_INFO_REQUIREDCHARFLAGS 22
#define PCRE_INFO_MATCHLIMIT 23
#define PCRE_INFO_RECURSIONLIMIT 24
#define PCRE_INFO_MATCH_EMPTY 25
/* Request types for pcre_config(). Do not re-arrange, in order to remain
compatible. */
#define PCRE_CONFIG_UTF8 0
#define PCRE_CONFIG_NEWLINE 1
#define PCRE_CONFIG_LINK_SIZE 2
#define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3
#define PCRE_CONFIG_MATCH_LIMIT 4
#define PCRE_CONFIG_STACKRECURSE 5
#define PCRE_CONFIG_UNICODE_PROPERTIES 6
#define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7
#define PCRE_CONFIG_BSR 8
#define PCRE_CONFIG_JIT 9
#define PCRE_CONFIG_UTF16 10
#define PCRE_CONFIG_JITTARGET 11
#define PCRE_CONFIG_UTF32 12
#define PCRE_CONFIG_PARENS_LIMIT 13
/* Request types for pcre_study(). Do not re-arrange, in order to remain
compatible. */
#define PCRE_STUDY_JIT_COMPILE 0x0001
#define PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE 0x0002
#define PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE 0x0004
#define PCRE_STUDY_EXTRA_NEEDED 0x0008
/* Bit flags for the pcre[16|32]_extra structure. Do not re-arrange or redefine
these bits, just add new ones on the end, in order to remain compatible. */
#define PCRE_EXTRA_STUDY_DATA 0x0001
#define PCRE_EXTRA_MATCH_LIMIT 0x0002
#define PCRE_EXTRA_CALLOUT_DATA 0x0004
#define PCRE_EXTRA_TABLES 0x0008
#define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010
#define PCRE_EXTRA_MARK 0x0020
#define PCRE_EXTRA_EXECUTABLE_JIT 0x0040
/* Types */
struct real_pcre8_or_16; /* declaration; the definition is private */
typedef struct real_pcre8_or_16 pcre;
struct real_pcre8_or_16; /* declaration; the definition is private */
typedef struct real_pcre8_or_16 pcre16;
struct real_pcre32; /* declaration; the definition is private */
typedef struct real_pcre32 pcre32;
struct real_pcre_jit_stack; /* declaration; the definition is private */
typedef struct real_pcre_jit_stack pcre_jit_stack;
struct real_pcre16_jit_stack; /* declaration; the definition is private */
typedef struct real_pcre16_jit_stack pcre16_jit_stack;
struct real_pcre32_jit_stack; /* declaration; the definition is private */
typedef struct real_pcre32_jit_stack pcre32_jit_stack;
/* If PCRE is compiled with 16 bit character support, PCRE_UCHAR16 must contain
a 16 bit wide signed data type. Otherwise it can be a dummy data type since
pcre16 functions are not implemented. There is a check for this in pcre_internal.h. */
#ifndef PCRE_UCHAR16
#define PCRE_UCHAR16 unsigned short
#endif
#ifndef PCRE_SPTR16
#define PCRE_SPTR16 const PCRE_UCHAR16 *
#endif
/* If PCRE is compiled with 32 bit character support, PCRE_UCHAR32 must contain
a 32 bit wide signed data type. Otherwise it can be a dummy data type since
pcre32 functions are not implemented. There is a check for this in pcre_internal.h. */
#ifndef PCRE_UCHAR32
#define PCRE_UCHAR32 unsigned int
#endif
#ifndef PCRE_SPTR32
#define PCRE_SPTR32 const PCRE_UCHAR32 *
#endif
/* When PCRE is compiled as a C++ library, the subject pointer type can be
replaced with a custom type. For conventional use, the public interface is a
const char *. */
#ifndef PCRE_SPTR
#define PCRE_SPTR const char *
#endif
/* The structure for passing additional data to pcre_exec(). This is defined in
such as way as to be extensible. Always add new fields at the end, in order to
remain compatible. */
typedef struct pcre_extra {
unsigned long int flags; /* Bits for which fields are set */
void *study_data; /* Opaque data from pcre_study() */
unsigned long int match_limit; /* Maximum number of calls to match() */
void *callout_data; /* Data passed back in callouts */
const unsigned char *tables; /* Pointer to character tables */
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
unsigned char **mark; /* For passing back a mark pointer */
void *executable_jit; /* Contains a pointer to a compiled jit code */
} pcre_extra;
/* Same structure as above, but with 16 bit char pointers. */
typedef struct pcre16_extra {
unsigned long int flags; /* Bits for which fields are set */
void *study_data; /* Opaque data from pcre_study() */
unsigned long int match_limit; /* Maximum number of calls to match() */
void *callout_data; /* Data passed back in callouts */
const unsigned char *tables; /* Pointer to character tables */
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
PCRE_UCHAR16 **mark; /* For passing back a mark pointer */
void *executable_jit; /* Contains a pointer to a compiled jit code */
} pcre16_extra;
/* Same structure as above, but with 32 bit char pointers. */
typedef struct pcre32_extra {
unsigned long int flags; /* Bits for which fields are set */
void *study_data; /* Opaque data from pcre_study() */
unsigned long int match_limit; /* Maximum number of calls to match() */
void *callout_data; /* Data passed back in callouts */
const unsigned char *tables; /* Pointer to character tables */
unsigned long int match_limit_recursion; /* Max recursive calls to match() */
PCRE_UCHAR32 **mark; /* For passing back a mark pointer */
void *executable_jit; /* Contains a pointer to a compiled jit code */
} pcre32_extra;
/* The structure for passing out data via the pcre_callout_function. We use a
structure so that new fields can be added on the end in future versions,
without changing the API of the function, thereby allowing old clients to work
without modification. */
typedef struct pcre_callout_block {
int version; /* Identifies version of block */
/* ------------------------ Version 0 ------------------------------- */
int callout_number; /* Number compiled into pattern */
int *offset_vector; /* The offset vector */
PCRE_SPTR subject; /* The subject being matched */
int subject_length; /* The length of the subject */
int start_match; /* Offset to start of this match attempt */
int current_position; /* Where we currently are in the subject */
int capture_top; /* Max current capture */
int capture_last; /* Most recently closed capture */
void *callout_data; /* Data passed in with the call */
/* ------------------- Added for Version 1 -------------------------- */
int pattern_position; /* Offset to next item in the pattern */
int next_item_length; /* Length of next item in the pattern */
/* ------------------- Added for Version 2 -------------------------- */
const unsigned char *mark; /* Pointer to current mark or NULL */
/* ------------------------------------------------------------------ */
} pcre_callout_block;
/* Same structure as above, but with 16 bit char pointers. */
typedef struct pcre16_callout_block {
int version; /* Identifies version of block */
/* ------------------------ Version 0 ------------------------------- */
int callout_number; /* Number compiled into pattern */
int *offset_vector; /* The offset vector */
PCRE_SPTR16 subject; /* The subject being matched */
int subject_length; /* The length of the subject */
int start_match; /* Offset to start of this match attempt */
int current_position; /* Where we currently are in the subject */
int capture_top; /* Max current capture */
int capture_last; /* Most recently closed capture */
void *callout_data; /* Data passed in with the call */
/* ------------------- Added for Version 1 -------------------------- */
int pattern_position; /* Offset to next item in the pattern */
int next_item_length; /* Length of next item in the pattern */
/* ------------------- Added for Version 2 -------------------------- */
const PCRE_UCHAR16 *mark; /* Pointer to current mark or NULL */
/* ------------------------------------------------------------------ */
} pcre16_callout_block;
/* Same structure as above, but with 32 bit char pointers. */
typedef struct pcre32_callout_block {
int version; /* Identifies version of block */
/* ------------------------ Version 0 ------------------------------- */
int callout_number; /* Number compiled into pattern */
int *offset_vector; /* The offset vector */
PCRE_SPTR32 subject; /* The subject being matched */
int subject_length; /* The length of the subject */
int start_match; /* Offset to start of this match attempt */
int current_position; /* Where we currently are in the subject */
int capture_top; /* Max current capture */
int capture_last; /* Most recently closed capture */
void *callout_data; /* Data passed in with the call */
/* ------------------- Added for Version 1 -------------------------- */
int pattern_position; /* Offset to next item in the pattern */
int next_item_length; /* Length of next item in the pattern */
/* ------------------- Added for Version 2 -------------------------- */
const PCRE_UCHAR32 *mark; /* Pointer to current mark or NULL */
/* ------------------------------------------------------------------ */
} pcre32_callout_block;
/* Indirection for store get and free functions. These can be set to
alternative malloc/free functions if required. Special ones are used in the
non-recursive case for "frames". There is also an optional callout function
that is triggered by the (?) regex item. For Virtual Pascal, these definitions
have to take another form. */
#ifndef VPCOMPAT
PCRE_EXP_DECL void *(*pcre_malloc)(size_t);
PCRE_EXP_DECL void (*pcre_free)(void *);
PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t);
PCRE_EXP_DECL void (*pcre_stack_free)(void *);
PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *);
PCRE_EXP_DECL int (*pcre_stack_guard)(void);
PCRE_EXP_DECL void *(*pcre16_malloc)(size_t);
PCRE_EXP_DECL void (*pcre16_free)(void *);
PCRE_EXP_DECL void *(*pcre16_stack_malloc)(size_t);
PCRE_EXP_DECL void (*pcre16_stack_free)(void *);
PCRE_EXP_DECL int (*pcre16_callout)(pcre16_callout_block *);
PCRE_EXP_DECL int (*pcre16_stack_guard)(void);
PCRE_EXP_DECL void *(*pcre32_malloc)(size_t);
PCRE_EXP_DECL void (*pcre32_free)(void *);
PCRE_EXP_DECL void *(*pcre32_stack_malloc)(size_t);
PCRE_EXP_DECL void (*pcre32_stack_free)(void *);
PCRE_EXP_DECL int (*pcre32_callout)(pcre32_callout_block *);
PCRE_EXP_DECL int (*pcre32_stack_guard)(void);
#else /* VPCOMPAT */
PCRE_EXP_DECL void *pcre_malloc(size_t);
PCRE_EXP_DECL void pcre_free(void *);
PCRE_EXP_DECL void *pcre_stack_malloc(size_t);
PCRE_EXP_DECL void pcre_stack_free(void *);
PCRE_EXP_DECL int pcre_callout(pcre_callout_block *);
PCRE_EXP_DECL int pcre_stack_guard(void);
PCRE_EXP_DECL void *pcre16_malloc(size_t);
PCRE_EXP_DECL void pcre16_free(void *);
PCRE_EXP_DECL void *pcre16_stack_malloc(size_t);
PCRE_EXP_DECL void pcre16_stack_free(void *);
PCRE_EXP_DECL int pcre16_callout(pcre16_callout_block *);
PCRE_EXP_DECL int pcre16_stack_guard(void);
PCRE_EXP_DECL void *pcre32_malloc(size_t);
PCRE_EXP_DECL void pcre32_free(void *);
PCRE_EXP_DECL void *pcre32_stack_malloc(size_t);
PCRE_EXP_DECL void pcre32_stack_free(void *);
PCRE_EXP_DECL int pcre32_callout(pcre32_callout_block *);
PCRE_EXP_DECL int pcre32_stack_guard(void);
#endif /* VPCOMPAT */
/* User defined callback which provides a stack just before the match starts. */
typedef pcre_jit_stack *(*pcre_jit_callback)(void *);
typedef pcre16_jit_stack *(*pcre16_jit_callback)(void *);
typedef pcre32_jit_stack *(*pcre32_jit_callback)(void *);
/* Exported PCRE functions */
PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *,
const unsigned char *);
PCRE_EXP_DECL pcre16 *pcre16_compile(PCRE_SPTR16, int, const char **, int *,
const unsigned char *);
PCRE_EXP_DECL pcre32 *pcre32_compile(PCRE_SPTR32, int, const char **, int *,
const unsigned char *);
PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **,
int *, const unsigned char *);
PCRE_EXP_DECL pcre16 *pcre16_compile2(PCRE_SPTR16, int, int *, const char **,
int *, const unsigned char *);
PCRE_EXP_DECL pcre32 *pcre32_compile2(PCRE_SPTR32, int, int *, const char **,
int *, const unsigned char *);
PCRE_EXP_DECL int pcre_config(int, void *);
PCRE_EXP_DECL int pcre16_config(int, void *);
PCRE_EXP_DECL int pcre32_config(int, void *);
PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *,
int *, int, const char *, char *, int);
PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre16 *, PCRE_SPTR16,
int *, int, PCRE_SPTR16, PCRE_UCHAR16 *, int);
PCRE_EXP_DECL int pcre32_copy_named_substring(const pcre32 *, PCRE_SPTR32,
int *, int, PCRE_SPTR32, PCRE_UCHAR32 *, int);
PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int,
char *, int);
PCRE_EXP_DECL int pcre16_copy_substring(PCRE_SPTR16, int *, int, int,
PCRE_UCHAR16 *, int);
PCRE_EXP_DECL int pcre32_copy_substring(PCRE_SPTR32, int *, int, int,
PCRE_UCHAR32 *, int);
PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *,
const char *, int, int, int, int *, int , int *, int);
PCRE_EXP_DECL int pcre16_dfa_exec(const pcre16 *, const pcre16_extra *,
PCRE_SPTR16, int, int, int, int *, int , int *, int);
PCRE_EXP_DECL int pcre32_dfa_exec(const pcre32 *, const pcre32_extra *,
PCRE_SPTR32, int, int, int, int *, int , int *, int);
PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR,
int, int, int, int *, int);
PCRE_EXP_DECL int pcre16_exec(const pcre16 *, const pcre16_extra *,
PCRE_SPTR16, int, int, int, int *, int);
PCRE_EXP_DECL int pcre32_exec(const pcre32 *, const pcre32_extra *,
PCRE_SPTR32, int, int, int, int *, int);
PCRE_EXP_DECL int pcre_jit_exec(const pcre *, const pcre_extra *,
PCRE_SPTR, int, int, int, int *, int,
pcre_jit_stack *);
PCRE_EXP_DECL int pcre16_jit_exec(const pcre16 *, const pcre16_extra *,
PCRE_SPTR16, int, int, int, int *, int,
pcre16_jit_stack *);
PCRE_EXP_DECL int pcre32_jit_exec(const pcre32 *, const pcre32_extra *,
PCRE_SPTR32, int, int, int, int *, int,
pcre32_jit_stack *);
PCRE_EXP_DECL void pcre_free_substring(const char *);
PCRE_EXP_DECL void pcre16_free_substring(PCRE_SPTR16);
PCRE_EXP_DECL void pcre32_free_substring(PCRE_SPTR32);
PCRE_EXP_DECL void pcre_free_substring_list(const char **);
PCRE_EXP_DECL void pcre16_free_substring_list(PCRE_SPTR16 *);
PCRE_EXP_DECL void pcre32_free_substring_list(PCRE_SPTR32 *);
PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int,
void *);
PCRE_EXP_DECL int pcre16_fullinfo(const pcre16 *, const pcre16_extra *, int,
void *);
PCRE_EXP_DECL int pcre32_fullinfo(const pcre32 *, const pcre32_extra *, int,
void *);
PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *,
int *, int, const char *, const char **);
PCRE_EXP_DECL int pcre16_get_named_substring(const pcre16 *, PCRE_SPTR16,
int *, int, PCRE_SPTR16, PCRE_SPTR16 *);
PCRE_EXP_DECL int pcre32_get_named_substring(const pcre32 *, PCRE_SPTR32,
int *, int, PCRE_SPTR32, PCRE_SPTR32 *);
PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *);
PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre16 *, PCRE_SPTR16);
PCRE_EXP_DECL int pcre32_get_stringnumber(const pcre32 *, PCRE_SPTR32);
PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *,
char **, char **);
PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre16 *, PCRE_SPTR16,
PCRE_UCHAR16 **, PCRE_UCHAR16 **);
PCRE_EXP_DECL int pcre32_get_stringtable_entries(const pcre32 *, PCRE_SPTR32,
PCRE_UCHAR32 **, PCRE_UCHAR32 **);
PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int,
const char **);
PCRE_EXP_DECL int pcre16_get_substring(PCRE_SPTR16, int *, int, int,
PCRE_SPTR16 *);
PCRE_EXP_DECL int pcre32_get_substring(PCRE_SPTR32, int *, int, int,
PCRE_SPTR32 *);
PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int,
const char ***);
PCRE_EXP_DECL int pcre16_get_substring_list(PCRE_SPTR16, int *, int,
PCRE_SPTR16 **);
PCRE_EXP_DECL int pcre32_get_substring_list(PCRE_SPTR32, int *, int,
PCRE_SPTR32 **);
PCRE_EXP_DECL const unsigned char *pcre_maketables(void);
PCRE_EXP_DECL const unsigned char *pcre16_maketables(void);
PCRE_EXP_DECL const unsigned char *pcre32_maketables(void);
PCRE_EXP_DECL int pcre_refcount(pcre *, int);
PCRE_EXP_DECL int pcre16_refcount(pcre16 *, int);
PCRE_EXP_DECL int pcre32_refcount(pcre32 *, int);
PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **);
PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre16 *, int, const char **);
PCRE_EXP_DECL pcre32_extra *pcre32_study(const pcre32 *, int, const char **);
PCRE_EXP_DECL void pcre_free_study(pcre_extra *);
PCRE_EXP_DECL void pcre16_free_study(pcre16_extra *);
PCRE_EXP_DECL void pcre32_free_study(pcre32_extra *);
PCRE_EXP_DECL const char *pcre_version(void);
PCRE_EXP_DECL const char *pcre16_version(void);
PCRE_EXP_DECL const char *pcre32_version(void);
/* Utility functions for byte order swaps. */
PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *, pcre_extra *,
const unsigned char *);
PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *, pcre16_extra *,
const unsigned char *);
PCRE_EXP_DECL int pcre32_pattern_to_host_byte_order(pcre32 *, pcre32_extra *,
const unsigned char *);
PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_UCHAR16 *,
PCRE_SPTR16, int, int *, int);
PCRE_EXP_DECL int pcre32_utf32_to_host_byte_order(PCRE_UCHAR32 *,
PCRE_SPTR32, int, int *, int);
/* JIT compiler related functions. */
PCRE_EXP_DECL pcre_jit_stack *pcre_jit_stack_alloc(int, int);
PCRE_EXP_DECL pcre16_jit_stack *pcre16_jit_stack_alloc(int, int);
PCRE_EXP_DECL pcre32_jit_stack *pcre32_jit_stack_alloc(int, int);
PCRE_EXP_DECL void pcre_jit_stack_free(pcre_jit_stack *);
PCRE_EXP_DECL void pcre16_jit_stack_free(pcre16_jit_stack *);
PCRE_EXP_DECL void pcre32_jit_stack_free(pcre32_jit_stack *);
PCRE_EXP_DECL void pcre_assign_jit_stack(pcre_extra *,
pcre_jit_callback, void *);
PCRE_EXP_DECL void pcre16_assign_jit_stack(pcre16_extra *,
pcre16_jit_callback, void *);
PCRE_EXP_DECL void pcre32_assign_jit_stack(pcre32_extra *,
pcre32_jit_callback, void *);
PCRE_EXP_DECL void pcre_jit_free_unused_memory(void);
PCRE_EXP_DECL void pcre16_jit_free_unused_memory(void);
PCRE_EXP_DECL void pcre32_jit_free_unused_memory(void);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* End of pcre.h */

View file

@ -0,0 +1,16 @@
<theme>
<view name="system, gamelist">
<image name="band1">
<color>EF8185</color>
</image>
<image name="band2">
<color>F3994B</color>
</image>
<image name="band3">
<color>FADD2F</color>
</image>
<image name="band4">
<color>A4DDF0</color>
</image>
</view>
</theme>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,40 @@
//========================================================================
//
// SplashFontFileID.h
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2018 Albert Astals Cid <aacid@kde.org>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#ifndef SPLASHFONTFILEID_H
#define SPLASHFONTFILEID_H
#include "poppler_private_export.h"
//------------------------------------------------------------------------
// SplashFontFileID
//------------------------------------------------------------------------
class POPPLER_PRIVATE_EXPORT SplashFontFileID
{
public:
SplashFontFileID();
virtual ~SplashFontFileID();
SplashFontFileID(const SplashFontFileID &) = delete;
SplashFontFileID &operator=(const SplashFontFileID &) = delete;
virtual bool matches(SplashFontFileID *id) = 0;
};
#endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

View file

@ -0,0 +1,11 @@
<theme>
<include>./../theme.xml</include>
<variant name="all">
<view name="gamelist">
<text name="systemName">
<letterCase>capitalize</letterCase>
</text>
</view>
</variant>
</theme>

View file

@ -0,0 +1,423 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 26.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
version="1.1"
id="Layer_1"
x="0px"
y="0px"
viewBox="0 0 5020.0001 624.7"
xml:space="preserve"
width="5020"
height="624.70001"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs148"><linearGradient
id="linearGradient34773"
gradientUnits="userSpaceOnUse"
x1="15.196"
y1="312.37051"
x2="3854.196"
y2="312.37051"
gradientTransform="translate(1160.9631,-2.2896484e-5)">
<stop
offset="0"
style="stop-color:#f3dd42;stop-opacity:1"
id="stop34769" />
<stop
offset="1"
style="stop-color:#d7861b;stop-opacity:1"
id="stop34771" />
</linearGradient>
<linearGradient
id="SVGID_1_"
gradientUnits="userSpaceOnUse"
x1="15.196"
y1="312.37051"
x2="3854.196"
y2="312.37051"
gradientTransform="translate(1160.9631,-2.2896484e-5)">
<stop
offset="0"
style="stop-color:#FF2422"
id="stop4" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop6" />
</linearGradient>
<linearGradient
xlink:href="#linearGradient34773"
id="linearGradient6574"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(1160.9631,-7.145e-5)"
x1="15.196"
y1="312.37051"
x2="3588.2239"
y2="316.50259" /></defs>
<style
type="text/css"
id="style2">
.st0{fill:#FFFFFF;}
.st1{fill:#FF0000;}
.st2{fill:url(#SVGID_1_);}
.st3{fill:url(#SVGID_00000060022068257817767130000001067164073883981741_);}
.st4{fill:url(#SVGID_00000144308182761068376180000004131709304805192586_);}
.st5{fill:url(#SVGID_00000000935997520668853970000011105419993307822477_);}
.st6{fill:url(#SVGID_00000018200174457167754170000000853354448091225986_);}
.st7{fill:url(#SVGID_00000072987630451721579260000010409738167651109522_);}
.st8{fill:#3636FF;}
.st9{display:none;}
.st10{display:inline;}
.st11{enable-background:new ;}
.st12{fill:url(#SVGID_00000099639162208554751810000013272208193612295339_);}
.st13{fill:url(#SVGID_00000158736166008707814920000018426778185460247990_);}
.st14{fill:url(#SVGID_00000133527000259551881150000004185836194023049859_);}
.st15{fill:url(#SVGID_00000093164219829473752460000004603917870326250679_);}
.st16{fill:url(#SVGID_00000156556395246081825560000005894267688922753411_);}
.st17{fill:url(#SVGID_00000135690321830567168220000000437954853257014148_);}
.st18{fill:url(#SVGID_00000040565659643257570880000002075315462357006765_);}
.st19{fill:url(#SVGID_00000017508175736194757820000008863537906517323707_);}
.st20{fill:url(#SVGID_00000126293465477839731700000000626789561221784705_);}
.st21{fill:url(#SVGID_00000087403315896914670680000008996143154280075168_);}
.st22{fill:url(#SVGID_00000151540686432933406660000011628697137491540393_);}
.st23{fill:url(#SVGID_00000143589059756432772880000012524823099024141722_);}
.st24{fill:url(#SVGID_00000052088033699595628130000015515451372212444082_);}
.st25{fill:url(#SVGID_00000126294377186336552610000001799937443100725399_);}
.st26{fill:url(#SVGID_00000070835762807858034660000013936331226864194476_);}
.st27{fill:url(#SVGID_00000092457199491666826160000016742156659903073436_);}
.st28{fill:url(#SVGID_00000138556585880754416440000017272986633013561527_);}
.st29{fill:url(#SVGID_00000032624778419303139080000015394367773870234245_);}
.st30{fill:url(#SVGID_00000040539262103052545880000003837399106474199717_);}
.st31{fill:url(#SVGID_00000115483974547727894610000006699104590764616355_);}
.st32{fill:url(#SVGID_00000041285316495664937430000010139118778734034608_);}
.st33{fill:url(#SVGID_00000178199001922562380240000009661348160359078294_);}
.st34{fill:url(#SVGID_00000145019290134935790460000010249637267404127883_);}
.st35{fill:url(#SVGID_00000117636406951782473700000003654222835714608307_);}
.st36{fill:url(#SVGID_00000158745280490234840560000003483236744759648947_);}
.st37{fill:url(#SVGID_00000146474604070782972690000015670225624893543309_);}
.st38{fill:url(#SVGID_00000173847499186819278890000011550608873747634579_);}
.st39{fill:url(#SVGID_00000141427567100195222880000010417319602782459071_);}
</style>
<g
id="g114781"><path
class="st2"
d="m 1579.7631,16.299929 -403.6,587.900101 h 212.6 l 50.9,-78.4 h 204.3 l 10,78.4 h 207.6 l -88.3,-587.900101 z m -53.4,371.100001 90.9,-141.8 15.8,141.8 z m 733.8,-366.900001 h -227.6 l -156.8,583.700101 h 195.2 l 45,-166.8001 h 48.4 l 65,166.8001 h 210.1 l -80.9,-194.3001 c 115.1,-35.9 162.6,-114.2 162.6,-205.1 0,-45.9 -13.3,-89.2 -45.9,-121.700001 -39.1,-39.2 -107.5,-62.6 -215.1,-62.6 z m -36.6,277.700001 h -70.9 l 30.9,-114.2 h 69.2 c 27.5,0 46.7,5.8 57.5,16.7 8.3,8.3 12.5,19.2 12.5,30.9 0,36.6 -34.2,66.6 -99.2,66.6 z m 857.8,191 -135.1,-106.7 c -31.7,39.2 -68.4,60.9 -113.4,60.9 -51.7,0 -91.7,-35.9 -91.7,-100.1 0,-80.1 56.7,-160.1 144.3,-160.1 44.2,0 78.4,23.3 90.9,70.9 l 174.3,-75.9 c -24.2,-103.500001 -113.5,-170.2000014 -239.4,-170.2000014 -251.8,0 -374.4,193.5000014 -374.4,352.7000014 0,156.8 113.4,256.0001 276.9,256.0001 124.2,0 209.3,-50.8 267.6,-127.5001 z m 361.1,-472.900001 -403.6,587.900101 h 212.6 l 50.9,-78.4 h 204.3 l 10,78.4 h 207.6 l -88.3,-587.900101 z m -53.4,371.100001 90.9,-141.8 15.8,141.8 z m 941.5,-291.800001 c -44.2,-44.2 -115.1,-75 -228.5,-75 h -206.8 l -156.8,583.700101 h 253.5 c 135.1,0 236,-37.5 306,-107.6001 62.5,-62.5 95.9,-142.6 95.9,-230.2 0.1,-70.9 -20,-127.6 -63.3,-170.900001 z m -176.8,291.000001 c -30,30 -80.9,47.5 -140.1,47.5 h -34.2 l 65,-243.5 h 32.5 c 46.7,0 75.9,10.8 94.2,29.2 15,15 24.2,35.9 24.2,67.5 0.1,35.9 -17.4,75.1 -41.6,99.3 z m 818,-206 43.4,-160.100001 h -497.8 l -156.8,583.700101 h 502 l 42.5,-160.1001 h -310.2 l 17.5,-63.4 h 285.2 l 37.5,-140.9 h -285.1 l 15.8,-59.2 z"
id="path9-5"
style="fill:url(#linearGradient6574);fill-opacity:1;stroke:#000000;stroke-opacity:1" /><g
id="g141"
transform="translate(1160.9631,-2.2896484e-5)"
style="fill:#000000;fill-opacity:1">
<g
id="g34"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000128444796063564815230000007252927678799283094_"
gradientUnits="userSpaceOnUse"
x1="357.92542"
y1="604.23328"
x2="357.92542"
y2="16.339899">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop15" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop17" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop19" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop21" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop23" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop25" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop27" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop29" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 598.5,32.3 83.6,555.9 h -175 l -8.2,-64.4 -1.8,-14 H 483 278.7 270 l -4.7,7.3 -46.1,71.1 H 45.6 L 427.2,32.3 H 598.5 M 336.2,403.4 h 29.3 106.7 17.9 l -2,-17.8 -15.8,-141.8 -5,-44.8 -24.4,38 -90.9,141.8 -15.8,24.6 M 612.3,16.3 H 418.8 L 15.2,604.2 h 212.6 l 50.9,-78.4 H 483 l 10,78.4 h 207.6 z m -246.9,371.1 90.9,-141.8 15.8,141.8 z"
id="path32" />
</g>
<g
id="g55"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000135673619673579814740000002913345356260872074_"
gradientUnits="userSpaceOnUse"
x1="1037.5408"
y1="604.23328"
x2="1037.5408"
y2="20.5096">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop36" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop38" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop40" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop42" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop44" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop46" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop48" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop50" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 1099.2,36.5 c 96.9,0 165.4,19.5 203.8,57.9 13.9,13.9 24.5,30.7 31.4,50 6.5,18.1 9.8,38.5 9.8,60.5 0,44.1 -11.8,82.3 -35,113.7 -25.5,34.4 -64.7,60.1 -116.4,76.2 l -16.8,5.2 6.7,16.2 71.7,172.1 h -175.2 l -61.1,-156.6 -4,-10.2 H 1003.2 955 942.7 l -3.2,11.8 -41.8,154.9 h -162 L 883.9,36.5 h 215.3 M 970.8,314.2 h 20.9 70.9 c 34.1,0 63,-7.8 83.4,-22.6 20.5,-14.9 31.8,-36.2 31.8,-60.1 0,-16.1 -6.1,-31.1 -17.2,-42.2 -14.2,-14.2 -37.3,-21.4 -68.9,-21.4 h -69.2 -12.3 l -3.2,11.8 -30.8,114.3 -5.4,20.2 M 1099.2,20.5 H 871.6 L 714.8,604.2 H 910 l 45,-166.8 h 48.4 l 65,166.8 h 210.1 l -80.9,-194.3 c 115.1,-35.9 162.6,-114.2 162.6,-205.1 0,-45.9 -13.3,-89.2 -45.9,-121.7 C 1275.2,43.9 1206.8,20.5 1099.2,20.5 Z M 991.7,298.2 1022.6,184 h 69.2 c 27.5,0 46.7,5.8 57.5,16.7 8.3,8.3 12.5,19.2 12.5,30.9 0,36.7 -34.2,66.7 -99.2,66.7 h -70.9 z"
id="path53" />
</g>
<g
id="g76"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000093171400342485411010000004786870807831186310_"
gradientUnits="userSpaceOnUse"
x1="1682.7727"
y1="616.74109"
x2="1682.7727"
y2="8.0001001">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop57" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop59" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop61" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop63" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop65" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop67" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop69" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop71" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 1750.3,24 c 57.9,0 109.2,15 148.5,43.3 34.7,25 59.3,60 71.9,101.7 L 1825,232.4 c -7.6,-18.4 -18.8,-33.3 -33.5,-44.4 -18.1,-13.6 -41.2,-20.8 -67,-20.8 -45.5,0 -87.1,19.8 -117.2,55.8 -27.3,32.7 -43,76.5 -43,120.3 0,34.9 10.7,64.3 31,85.2 19.3,19.9 46.5,30.8 76.7,30.8 24.7,0 48,-6 69.4,-17.7 16.4,-9 31.6,-21.2 46.1,-37.1 l 110.4,87.3 c -27.1,32.4 -58.6,57.9 -93.8,75.7 -43.7,22.1 -94.6,33.3 -151.3,33.3 -38.6,0 -74.6,-5.7 -106.9,-17.1 -31.6,-11 -59.2,-27.2 -82,-48 -47,-42.8 -71.9,-103.3 -71.9,-175 0,-38.4 7.6,-78.7 22,-116.6 15.4,-40.6 37.8,-77.1 66.6,-108.7 C 1526.8,84.6 1611.1,24 1750.3,24 m 0,-16 c -251.8,0 -374.4,193.5 -374.4,352.7 0,156.8 113.4,256 276.9,256 124.2,0 209.3,-50.9 267.7,-127.6 L 1785.4,382.4 c -31.7,39.2 -68.4,60.9 -113.4,60.9 -51.7,0 -91.7,-35.9 -91.7,-100.1 0,-80.1 56.7,-160.1 144.3,-160.1 44.2,0 78.4,23.3 90.9,70.9 l 174.3,-75.9 C 1965.5,74.7 1876.2,8 1750.3,8 Z"
id="path74" />
</g>
<g
id="g97"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000145054330599880703690000004533480753458681732_"
gradientUnits="userSpaceOnUse"
x1="2220.6216"
y1="604.23328"
x2="2220.6216"
y2="16.339899">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop78" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop80" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop82" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop84" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop86" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop88" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop90" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop92" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 2461.2,32.3 83.6,555.9 h -175 l -8.2,-64.4 -1.8,-14 h -14.1 -204.3 -8.7 l -4.7,7.3 -46.1,71.1 H 1908.3 L 2289.9,32.3 h 171.3 m -262.3,371.1 h 29.3 106.7 17.9 l -2,-17.8 -15.8,-141.8 -5,-44.8 -24.4,38 -90.9,141.8 -15.8,24.6 M 2475,16.3 h -193.5 l -403.6,587.9 h 212.6 l 50.9,-78.4 h 204.3 l 10,78.4 h 207.6 z m -246.9,371.1 90.9,-141.8 15.8,141.8 z"
id="path95" />
</g>
<g
id="g118"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000106148091704042031110000017185161894946614463_"
gradientUnits="userSpaceOnUse"
x1="2905.2402"
y1="604.23328"
x2="2905.2402"
y2="20.5096">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop99" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop101" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop103" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop105" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop107" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop109" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop111" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop113" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 2941.1,36.5 c 51.9,0 97.3,6.7 134.9,20 32.8,11.6 60.5,28.5 82.3,50.3 39.5,39.5 58.7,91.7 58.7,159.6 0,41.5 -7.8,81.3 -23.3,118.3 -15.4,37.1 -38.3,70.9 -67.9,100.5 -33.6,33.6 -74.8,59.2 -122.7,76.3 -49.5,17.6 -107.4,26.6 -172,26.6 H 2598.5 L 2746.7,36.4 h 194.4 m -143.4,413.7 h 20.8 34.2 c 63,0 118.2,-19 151.4,-52.2 28.2,-28.2 46.4,-71.6 46.4,-110.5 0,-33.6 -9.4,-59.4 -28.9,-78.9 -22.8,-22.8 -57.3,-33.9 -105.5,-33.9 h -32.5 -12.3 l -3.2,11.9 -65,243.5 -5.4,20.1 M 2941.1,20.5 H 2734.3 L 2577.5,604.2 H 2831 c 135.1,0 236,-37.5 306,-107.6 62.5,-62.5 95.9,-142.6 95.9,-230.2 0,-70.9 -20,-127.6 -63.4,-170.9 -44.1,-44.1 -115,-75 -228.4,-75 z m -122.6,413.6 65,-243.5 h 32.5 c 46.7,0 75.9,10.8 94.2,29.2 15,15 24.2,35.9 24.2,67.5 0,35.9 -17.5,75 -41.7,99.2 -30,30 -80.9,47.5 -140.1,47.5 h -34.1 z"
id="path116" />
</g>
<g
id="g139"
style="fill:#000000;fill-opacity:1">
<linearGradient
id="SVGID_00000021080724737336074490000000910687952145319586_"
gradientUnits="userSpaceOnUse"
x1="3526.8933"
y1="604.23328"
x2="3526.8933"
y2="20.5096">
<stop
offset="0"
style="stop-color:#FF0000"
id="stop120" />
<stop
offset="0.2634"
style="stop-color:#E42372"
id="stop122" />
<stop
offset="0.3192"
style="stop-color:#FFA1FF"
id="stop124" />
<stop
offset="0.4267"
style="stop-color:#DA2F9A"
id="stop126" />
<stop
offset="0.7554"
style="stop-color:#CC41D4"
id="stop128" />
<stop
offset="0.7881"
style="stop-color:#FFA1FF"
id="stop130" />
<stop
offset="0.8413"
style="stop-color:#C846E3"
id="stop132" />
<stop
offset="1"
style="stop-color:#C24FFF"
id="stop134" />
</linearGradient>
<path
style="fill:#000000;fill-opacity:1"
d="m 3833.3,36.5 -34.7,128.1 h -293.8 -12.3 l -3.2,11.9 -15.8,59.2 -5.4,20.1 h 20.8 264.4 l -29,108.9 h -272.9 -12.2 l -3.2,11.7 -17.5,63.4 -5.6,20.3 h 21 289.4 l -34,128.1 H 3220.5 L 3368.7,36.5 h 464.6 m 20.9,-16 h -497.8 l -156.8,583.7 h 502 l 42.5,-160.1 h -310.2 l 17.5,-63.4 h 285.2 l 37.5,-140.9 H 3489 l 15.8,-59.2 h 306 z"
id="path137" />
</g>
</g><g
aria-label="PC"
id="text2067"
style="font-size:833.836px;line-height:1.25;font-family:Digitalt;-inkscape-font-specification:Digitalt;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;stroke-width:4.34289"
transform="translate(-12.479633,-2.2896484e-5)"><path
d="m 327.50356,306.51318 q 55.86702,0 81.71593,-21.67974 26.68275,-22.51357 26.68275,-55.86701 0,-20.01207 -14.17521,-34.18728 -10.00603,-10.00603 -25.84891,-14.17521 -15.84289,-4.16918 -32.51961,-4.16918 H 326.66973 L 292.48245,306.51318 Z M 174.07774,20.507428 H 370.0292 q 80.88209,0 132.57992,15.842884 51.69784,15.842884 84.21744,48.362488 23.34741,23.34741 34.18728,53.3655 11.6737,29.18426 11.6737,64.20538 0,55.03317 -20.01206,100.06032 -20.01207,44.1933 -58.36852,76.71291 -37.52262,31.68577 -92.5558,49.19632 -55.03318,17.51056 -124.24156,17.51056 H 254.95983 L 212.4342,604.19263 H 17.316573 Z"
style="font-family:'Gotham Ultra';-inkscape-font-specification:'Gotham Ultra'"
id="path8135" /><path
d="m 907.01877,616.70017 q -61.70387,0 -112.56786,-17.51056 -50.864,-18.34439 -87.55278,-51.69783 -35.85495,-33.35344 -56.70085,-80.04826 -20.01206,-47.52865 -20.01206,-106.731 0,-60.0362 22.51357,-122.5739 23.34741,-62.5377 70.04222,-113.40169 46.69482,-51.697834 116.73704,-84.217438 70.87606,-32.519604 165.09955,-32.519604 47.5286,0 86.7189,12.50754 40.0242,11.673704 70.8761,34.187276 30.8519,21.679736 51.6978,53.365506 20.8459,31.68577 30.0181,70.04222 l -174.2717,75.87908 q -9.1722,-35.85495 -33.3535,-53.36551 -24.1812,-17.51055 -57.53464,-17.51055 -32.5196,0 -59.20235,14.17521 -26.68276,13.34138 -45.86098,35.85495 -18.3444,22.51357 -29.18426,51.69783 -10.00604,28.35042 -10.00604,58.36852 0,48.36249 25.84892,74.2114 26.68275,25.84892 65.87304,25.84892 34.18728,0 61.70387,-15.84288 27.51654,-15.84289 51.69784,-45.02715 l 135.0814,106.73101 q -44.1933,57.53468 -109.2325,92.55579 -65.0392,35.02112 -158.42883,35.02112 z"
style="font-family:'Gotham Ultra';-inkscape-font-specification:'Gotham Ultra'"
id="path8137" /></g></g></svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,19 @@
<theme>
<view name="system">
<text name="info1">
<text>WASM-4 is an open source fantasy console for creating tiny</text>
</text>
<text name="info2">
<text>games running at a resolution of 128×128 pixels and 4 colors.</text>
</text>
<text name="info3">
<text>It's language agnostic so games can be written in a variety</text>
</text>
<text name="info4">
<text>of programming languages.</text>
</text>
<text name="info5">
<text>It was originally released in 2021.</text>
</text>
</view>
</theme>

View file

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="1024"
height="324"
viewBox="0 0 661.45838 209.02083"
version="1.1"
id="svg83"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="completed.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<defs
id="defs28" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="536.89607"
inkscape:cy="210.74307"
inkscape:document-units="mm"
inkscape:current-layer="layer4"
inkscape:document-rotation="0"
showgrid="false"
inkscape:window-width="3840"
inkscape:window-height="2065"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px"
inkscape:pagecheckerboard="0">
<sodipodi:guide
position="-28.01195,347.43141"
orientation="500.00005,0"
id="guide19" />
<sodipodi:guide
position="236.57141,215.13973"
orientation="-500.00005,0"
id="guide23" />
</sodipodi:namedview>
<metadata
id="metadata80">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:groupmode="layer"
id="layer1"
inkscape:label="shadow1"
style="opacity:1"
sodipodi:insensitive="true">
<circle
id="path31-3"
cx="108.621"
cy="104.51"
style="fill:#a1a1a1;fill-opacity:0.25;stroke-width:0.306422"
r="101.27119" />
</g>
<g
inkscape:groupmode="layer"
id="g880"
inkscape:label="shadow2"
style="opacity:1"
sodipodi:insensitive="true">
<circle
id="circle878"
cx="108.621"
cy="104.51"
style="fill:#a1a1a1;fill-opacity:0.125;stroke-width:0.312173"
r="103.17193" />
</g>
<g
inkscape:groupmode="layer"
id="g884"
inkscape:label="shadow3"
style="opacity:1"
sodipodi:insensitive="true">
<circle
id="circle882"
cx="108.621"
cy="104.51"
style="fill:#a1a1a1;fill-opacity:0.0625;stroke-width:0.322806"
r="106.686" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="sketch"
style="opacity:1" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="bg"
style="opacity:1" />
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="text">
<circle
id="path31"
cx="108.62084"
cy="104.51041"
style="fill:#efefef;fill-opacity:1;stroke-width:0.302576"
r="100" />
<path
d="M 157.49883,69.438526 86.436765,140.50059 56.49556,110.55938 l -5.91115,5.91116 32.896778,32.89678 2.955577,2.82704 2.955577,-2.82704 74.017648,-74.017643 z"
id="path1144"
style="stroke:#00f0b9;stroke-width:7.423;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;fill:#00f0b9;fill-opacity:1" />
<g
aria-label="Completed"
id="text1537"
style="font-size:81.821px;line-height:1.1;font-family:Digitalt;-inkscape-font-specification:Digitalt;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#222222;fill-opacity:1;stroke-width:0.645955"
transform="translate(0,5.1350805)">
<path
d="m 270.87274,129.91584 q -5.97293,0 -10.88219,-1.96371 -4.90926,-1.9637 -8.42757,-5.72747 -3.5183,-3.76376 -5.482,-9.24577 -1.88189,-5.56383 -1.88189,-12.68225 0,-7.118431 2.12735,-12.600438 2.20917,-5.563828 5.89111,-9.327594 3.68195,-3.763766 8.59121,-5.72747 4.90926,-1.963704 10.47308,-1.963704 3.51831,0 6.30022,0.490926 2.86374,0.490926 4.90926,1.145494 2.12735,0.654568 3.43648,1.309136 1.30914,0.654568 1.80007,0.981852 l -2.29099,6.54568 q -0.73639,-0.490926 -2.12735,-1.063673 -1.39096,-0.572747 -3.19102,-1.145494 -1.71824,-0.572747 -3.84558,-0.900031 -2.04553,-0.409105 -4.17288,-0.409105 -4.50015,0 -8.10027,1.554599 -3.60013,1.554599 -6.13658,4.500155 -2.53645,2.945556 -3.92741,7.200248 -1.30913,4.172871 -1.30913,9.409419 0,5.0729 1.14549,9.24577 1.22732,4.17287 3.60012,7.20025 2.37281,2.94555 5.89112,4.58197 3.60012,1.63642 8.34574,1.63642 5.48201,0 9.08213,-1.14549 3.60012,-1.1455 5.40019,-2.04553 l 2.04552,6.54568 q -0.57275,0.40911 -2.04552,1.06368 -1.47278,0.57274 -3.68195,1.14549 -2.20917,0.57275 -5.15472,0.98185 -2.94556,0.40911 -6.38204,0.40911 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8259" />
<path
d="m 333.05651,107.41506 q 0,5.0729 -1.47278,9.16395 -1.47278,4.09105 -4.17287,7.03661 -2.61828,2.94556 -6.30022,4.58198 -3.68195,1.5546 -8.01846,1.5546 -4.33651,0 -8.01846,-1.5546 -3.68194,-1.63642 -6.38203,-4.58198 -2.61828,-2.94556 -4.09105,-7.03661 -1.47278,-4.09105 -1.47278,-9.16395 0,-4.99108 1.47278,-9.082128 1.47277,-4.172871 4.09105,-7.118427 2.70009,-2.945556 6.38203,-4.500155 3.68195,-1.63642 8.01846,-1.63642 4.33651,0 8.01846,1.63642 3.68194,1.554599 6.30022,4.500155 2.70009,2.945556 4.17287,7.118427 1.47278,4.091048 1.47278,9.082128 z m -7.93664,0 q 0,-7.20025 -3.27284,-11.373116 -3.19102,-4.254692 -8.75485,-4.254692 -5.56383,0 -8.83667,4.254692 -3.19102,4.172866 -3.19102,11.373116 0,7.20025 3.19102,11.45494 3.27284,4.17287 8.83667,4.17287 5.56383,0 8.75485,-4.17287 3.27284,-4.25469 3.27284,-11.45494 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8261" />
<path
d="m 343.77491,87.368918 q 2.61827,-0.654568 6.87297,-1.390957 4.33651,-0.736389 9.98216,-0.736389 4.09105,0 6.87296,1.145494 2.78192,1.063673 4.6638,3.191019 0.57275,-0.409105 1.80006,-1.145494 1.22732,-0.736389 3.02738,-1.390957 1.80006,-0.736389 4.00923,-1.227315 2.20916,-0.572747 4.74562,-0.572747 4.90926,0 8.01845,1.472778 3.1092,1.390957 4.82744,4.009229 1.80006,2.618272 2.37281,6.218396 0.65457,3.600125 0.65457,7.854815 v 23.89173 h -7.60935 v -22.25531 q 0,-3.76377 -0.40911,-6.463858 -0.32728,-2.700093 -1.39096,-4.500155 -0.98185,-1.800062 -2.78191,-2.618272 -1.71824,-0.900031 -4.50015,-0.900031 -3.84559,0 -6.38204,1.063673 -2.45463,0.981852 -3.35466,1.800062 0.65456,2.127346 0.98185,4.663797 0.32728,2.536454 0.32728,5.318364 v 23.89173 h -7.60935 v -22.25531 q 0,-3.76377 -0.40911,-6.463858 -0.4091,-2.700093 -1.47277,-4.500155 -0.98186,-1.800062 -2.78192,-2.618272 -1.71824,-0.900031 -4.41833,-0.900031 -1.1455,0 -2.45463,0.08182 -1.30914,0.08182 -2.53645,0.245463 -1.1455,0.08182 -2.12735,0.245463 -0.98185,0.163642 -1.30913,0.245463 v 35.919417 h -7.60936 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8263" />
<path
d="m 443.76002,107.49688 q 0,-7.44571 -3.68195,-11.454936 -3.68194,-4.009229 -9.81852,-4.009229 -3.43648,0 -5.40018,0.245463 -1.88189,0.245463 -3.02738,0.572747 v 26.837285 q 1.39096,1.1455 4.00923,2.20917 2.61827,1.06367 5.72747,1.06367 3.27284,0 5.56383,-1.14549 2.3728,-1.22732 3.84558,-3.27284 1.47278,-2.12735 2.12735,-4.90926 0.65457,-2.86374 0.65457,-6.13658 z m 7.93663,0 q 0,4.82744 -1.30913,8.91849 -1.22732,4.09105 -3.68195,7.03661 -2.45463,2.94555 -6.05475,4.58197 -3.5183,1.63642 -8.10028,1.63642 -3.68195,0 -6.54568,-0.98185 -2.78191,-0.98185 -4.17287,-1.88188 v 17.01877 h -7.60935 V 87.450739 q 2.70009,-0.654568 6.70932,-1.390957 4.09105,-0.81821 9.40941,-0.81821 4.90926,0 8.83667,1.554599 3.92741,1.554599 6.70932,4.418334 2.78192,2.863735 4.25469,7.036606 1.5546,4.091049 1.5546,9.245769 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8265" />
<path
d="m 475.17919,129.50673 q -7.03661,-0.16364 -9.98217,-3.02737 -2.94555,-2.86374 -2.94555,-8.91849 V 66.504563 l 7.60935,-1.309136 v 51.138123 q 0,1.88188 0.32729,3.1092 0.32728,1.22731 1.06367,1.9637 0.73639,0.73639 1.9637,1.1455 1.22732,0.32728 3.02738,0.57274 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8267" />
<path
d="m 482.37934,107.49688 q 0,-5.64565 1.63642,-9.818516 1.63642,-4.254692 4.33651,-7.036606 2.70009,-2.781914 6.2184,-4.172871 3.5183,-1.390957 7.20024,-1.390957 8.59121,0 13.17319,5.400186 4.58197,5.318365 4.58197,16.282374 0,0.49093 0,1.30914 0,0.73639 -0.0818,1.39096 h -29.12828 q 0.49093,6.6275 3.84559,10.06398 3.35466,3.43648 10.47309,3.43648 4.00923,0 6.70932,-0.65457 2.78192,-0.73638 4.17287,-1.39095 l 1.06368,6.38204 q -1.39096,0.73638 -4.90926,1.55459 -3.43649,0.81821 -7.85482,0.81821 -5.56383,0 -9.65488,-1.63642 -4.00923,-1.71824 -6.6275,-4.66379 -2.61827,-2.94556 -3.92741,-6.95479 -1.22731,-4.09105 -1.22731,-8.91849 z m 29.21009,-4.17287 q 0.0818,-5.15472 -2.61827,-8.42756 -2.61827,-3.354661 -7.28207,-3.354661 -2.61827,0 -4.66379,1.063673 -1.96371,0.981852 -3.35466,2.618272 -1.39096,1.63642 -2.20917,3.763766 -0.73639,2.12735 -0.98185,4.33651 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8269" />
<path
d="m 537.60837,86.141603 h 16.11873 v 6.382038 h -16.11873 v 19.637039 q 0,3.19102 0.49092,5.31837 0.49093,2.04552 1.47278,3.27284 0.98185,1.14549 2.45463,1.63642 1.47278,0.49092 3.43648,0.49092 3.43648,0 5.48201,-0.73639 2.12735,-0.81821 2.94556,-1.14549 l 1.47277,6.30022 q -1.14549,0.57274 -4.00923,1.39095 -2.86373,0.90003 -6.54568,0.90003 -4.33651,0 -7.20024,-1.06367 -2.78192,-1.14549 -4.50016,-3.35466 -1.71824,-2.20917 -2.45463,-5.40019 -0.65457,-3.27284 -0.65457,-7.52753 V 74.277558 l 7.60936,-1.309136 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8271" />
<path
d="m 560.19083,107.49688 q 0,-5.64565 1.63642,-9.818516 1.63642,-4.254692 4.33651,-7.036606 2.7001,-2.781914 6.2184,-4.172871 3.5183,-1.390957 7.20025,-1.390957 8.5912,0 13.17318,5.400186 4.58197,5.318365 4.58197,16.282374 0,0.49093 0,1.30914 0,0.73639 -0.0818,1.39096 h -29.12827 q 0.49092,6.6275 3.84558,10.06398 3.35467,3.43648 10.47309,3.43648 4.00923,0 6.70932,-0.65457 2.78192,-0.73638 4.17288,-1.39095 l 1.06367,6.38204 q -1.39096,0.73638 -4.90926,1.55459 -3.43648,0.81821 -7.85482,0.81821 -5.56383,0 -9.65488,-1.63642 -4.00922,-1.71824 -6.6275,-4.66379 -2.61827,-2.94556 -3.9274,-6.95479 -1.22732,-4.09105 -1.22732,-8.91849 z m 29.2101,-4.17287 q 0.0818,-5.15472 -2.61827,-8.42756 -2.61828,-3.354661 -7.28207,-3.354661 -2.61828,0 -4.6638,1.063673 -1.9637,0.981852 -3.35466,2.618272 -1.39096,1.63642 -2.20917,3.763766 -0.73639,2.12735 -0.98185,4.33651 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8273" />
<path
d="m 635.79326,95.141913 q -1.39096,-1.145494 -4.00923,-2.209167 -2.61827,-1.063673 -5.72747,-1.063673 -3.27284,0 -5.64565,1.227315 -2.29099,1.145494 -3.76377,3.27284 -1.47277,2.045525 -2.12734,4.909262 -0.65457,2.86373 -0.65457,6.13657 0,7.44571 3.68194,11.53676 3.68195,4.00923 9.81852,4.00923 3.1092,0 5.15473,-0.24546 2.12734,-0.32728 3.27284,-0.65457 z m 0,-28.63735 7.60935,-1.309136 v 62.265783 q -2.61827,0.73639 -6.70932,1.47278 -4.09105,0.73638 -9.40942,0.73638 -4.90926,0 -8.83666,-1.55459 -3.92741,-1.5546 -6.70933,-4.41834 -2.78191,-2.86373 -4.33651,-6.95478 -1.47278,-4.17287 -1.47278,-9.3276 0,-4.90926 1.22732,-9.000307 1.30913,-4.09105 3.76376,-7.036606 2.45463,-2.945556 5.97294,-4.581976 3.60012,-1.63642 8.1821,-1.63642 3.68194,0 6.46386,0.981852 2.86373,0.981852 4.25469,1.881883 z"
style="font-family:Ubuntu;-inkscape-font-specification:Ubuntu;fill:#222222;fill-opacity:1"
id="path8275" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" id="allgames" x="0px" y="0px" viewBox="0 0 200 40" xmlns="http://www.w3.org/2000/svg">
<path d="M 56.542 29.546 L 50.542 29.546 L 58.432 10.796 L 67.252 10.796 L 68.572 29.546 L 62.542 29.546 L 62.422 26.576 L 57.712 26.576 Z M 61.672 16.556 L 59.572 21.806 L 61.972 21.806 L 61.972 16.556 Z M 81.951 29.546 L 70.551 29.546 L 73.851 10.796 L 79.551 10.796 L 77.091 24.746 L 82.791 24.746 Z M 94.73 29.546 L 83.33 29.546 L 86.63 10.796 L 92.33 10.796 L 89.87 24.746 L 95.57 24.746 Z M 112.309 24.026 L 112.459 23.216 L 111.019 23.216 L 111.829 18.626 L 118.699 18.626 L 116.929 28.646 C 114.489 29.546 112.039 29.996 109.579 29.996 C 107.119 29.996 105.344 29.506 104.254 28.526 C 103.164 27.546 102.619 26.036 102.619 23.996 C 102.619 23.136 102.759 21.866 103.039 20.186 C 103.639 16.706 104.699 14.196 106.219 12.656 C 107.739 11.116 110.259 10.346 113.779 10.346 C 114.519 10.346 115.464 10.426 116.614 10.586 C 117.764 10.746 118.609 10.926 119.149 11.126 L 117.499 15.716 C 115.999 15.436 114.624 15.296 113.374 15.296 C 112.124 15.296 111.229 15.396 110.689 15.596 C 110.149 15.796 109.829 16.196 109.729 16.796 L 108.259 25.286 L 110.149 25.286 C 110.829 25.286 111.334 25.211 111.664 25.061 C 111.994 24.911 112.209 24.566 112.309 24.026 Z M 123.948 29.546 L 117.948 29.546 L 125.838 10.796 L 134.658 10.796 L 135.978 29.546 L 129.948 29.546 L 129.828 26.576 L 125.118 26.576 Z M 129.078 16.556 L 126.978 21.806 L 129.378 21.806 L 129.378 16.556 Z M 143.358 29.546 L 137.418 29.546 L 141.798 10.796 L 149.238 10.796 L 149.778 20.336 L 149.988 20.336 L 153.888 10.796 L 161.328 10.796 L 159.108 29.546 L 153.138 29.546 L 154.398 20.456 L 154.188 20.456 L 150.438 29.546 L 146.088 29.546 L 145.458 20.456 L 145.308 20.456 Z M 174.916 22.466 L 169.216 22.466 L 168.826 24.746 L 175.816 24.746 L 174.976 29.546 L 162.286 29.546 L 165.586 10.796 L 178.126 10.796 L 176.566 15.596 L 170.416 15.596 L 169.996 18.116 L 175.696 18.116 Z M 177.646 29.216 L 179.326 24.266 C 181.006 24.726 182.546 24.956 183.946 24.956 C 185.346 24.956 186.476 24.896 187.336 24.776 L 187.576 23.276 L 185.086 23.036 C 183.186 22.856 181.841 22.426 181.051 21.746 C 180.261 21.066 179.866 20.106 179.866 18.866 C 179.866 18.326 179.926 17.726 180.046 17.066 C 180.506 14.506 181.341 12.746 182.551 11.786 C 183.761 10.826 185.636 10.346 188.176 10.346 C 190.716 10.346 192.956 10.596 194.896 11.096 L 193.336 15.896 C 191.596 15.596 190.196 15.446 189.136 15.446 C 188.076 15.446 187.176 15.496 186.436 15.596 L 186.196 17.066 L 188.206 17.276 C 190.246 17.496 191.696 17.981 192.556 18.731 C 193.416 19.481 193.846 20.486 193.846 21.746 C 193.846 23.026 193.566 24.346 193.006 25.706 C 192.726 26.406 192.421 26.991 192.091 27.461 C 191.761 27.931 191.341 28.331 190.831 28.661 C 190.321 28.991 189.856 29.241 189.436 29.411 C 189.016 29.581 188.486 29.706 187.846 29.786 C 186.906 29.926 185.756 29.996 184.396 29.996 C 181.916 29.996 179.666 29.736 177.646 29.216 Z" style="white-space: pre; fill: rgb(255, 255, 255);"/>
<path d="M 35.116 10 L 15.117 10 C 7.421 9.999 2.61 18.329 6.457 24.994 C 9.764 30.724 17.624 31.719 22.255 26.995 L 27.973 26.995 C 33.36 32.491 42.677 30.094 44.743 22.681 C 46.518 16.31 41.729 10.002 35.116 10 Z M 20.615 20.747 C 20.615 21.161 20.28 21.497 19.866 21.497 L 16.617 21.497 L 16.617 24.746 C 16.617 25.16 16.281 25.496 15.867 25.496 L 14.367 25.496 C 13.953 25.496 13.618 25.16 13.618 24.746 L 13.618 21.497 L 10.368 21.497 C 9.954 21.497 9.619 21.161 9.619 20.747 L 9.619 19.247 C 9.619 18.833 9.954 18.498 10.368 18.498 L 13.618 18.498 L 13.618 15.248 C 13.618 14.834 13.953 14.499 14.367 14.499 L 15.867 14.499 C 16.281 14.499 16.617 14.834 16.617 15.248 L 16.617 18.498 L 19.866 18.498 C 20.28 18.498 20.615 18.833 20.615 19.247 Z M 34.112 25.496 C 32.188 25.496 30.985 23.413 31.947 21.747 C 32.909 20.08 35.314 20.08 36.276 21.747 C 36.495 22.127 36.611 22.558 36.611 22.996 C 36.611 24.377 35.492 25.496 34.112 25.496 Z M 38.11 19.497 C 36.186 19.497 34.984 17.415 35.946 15.748 C 36.908 14.082 39.313 14.082 40.275 15.748 C 40.494 16.128 40.61 16.559 40.61 16.998 C 40.61 18.378 39.491 19.497 38.11 19.497 Z" style="fill: rgb(221, 221, 221);"/>
</svg>

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View file

@ -0,0 +1,890 @@
//========================================================================
//
// UnicodeTypeTable.cc
//
// Copyright 2004 Glyph & Cog, LLC
//
//========================================================================
//========================================================================
//
// Modified under the Poppler project - http://poppler.freedesktop.org
//
// All changes made under the Poppler project to this file are licensed
// under GPL version 2 or later
//
// Copyright (C) 2006, 2007 Ed Catmur <ed@catmur.co.uk>
// Copyright (C) 2007 Jeff Muizelaar <jeff@infidigm.net>
// Copyright (C) 2008, 2016 Albert Astals Cid <aacid@kde.org>
// Copyright (C) 2012 Adrian Johnson <ajohnson@redneon.com>
// Copyright (C) 2016 Khaled Hosny <khaledhosny@eglug.org>
// Copyright (C) 2019 Adriaan de Groot <groot@kde.org>
// Copyright (C) 2020 Alex Henrie <alexhenrie24@gmail.com>
//
// To see a description of the changes please see the Changelog file that
// came with your tarball or type make ChangeLog if you are building from git
//
//========================================================================
#include <cstdlib>
#include "CharTypes.h"
#include "UnicodeTypeTable.h"
#include "goo/gmem.h"
struct UnicodeMapTableEntry
{
const char *vector;
const char type;
};
struct UnicodeCaseTableVector
{
Unicode codes[256];
};
static const UnicodeMapTableEntry typeTable[256] = {
{ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN###NNNNN################NNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#N####NNNNLNNNNN####NLNNN#"
"LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLL",
'X' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLNNNNNNNNNNNNNNLLNNNNNNNNNNNNNNLLLLLNNN"
"NNNNNNLNNNNNNNNNNNNNNNNN",
'X' },
{ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLNNNNNNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLNLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNRNRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
"RRRRRRRRRRRRRRRRRRRRRRRR",
'X' },
{ "RRRR#########RNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNN####################"
"RRRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNRNNNNNNNRRNNNNNNNRR##########RRRRRR",
'X' },
{ "RRRRRRRRRRRRRRNNRNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNNNNNNNNNNNNNNNNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNNNNNNNNNNRNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
"NNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ nullptr, 'N' },
{ "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLNNNNLLLLLLLLLLLLLNNLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNLLLLLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLL"
"LLLLLLLLLL##LLLLLLLNNNNN",
'X' },
{ "NNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLNNNNNNNNLLLLNLLLLLLLLLLLLLLLLLLLLNNLLLL"
"LLLLLLLL##NNNNNNNNNNNNNN",
'X' },
{ "NNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLNLNNNLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLNNNNNN#NLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLNNNNNLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNN#####"
"LLLLLLLNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLNNNNNNNNNLLLLLLLLLLNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNLNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNLNNNNNLNNLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLNNNNNNLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNLLLLLLLLNLLNNNNNNNNNNNLLLLLLL#"
"LNLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ "NNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLNNNNNLLLLLLNLLLLLLNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
"NNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNLNNNLLLLLLLLLLLNNNLLLLLLLLLLLLNNNNLLLLLLLL"
"LLLLLNNNLLLLLLLLLLLLLNNN",
'X' },
{ "NNNNNNNNNNNNNNLRNNNNNNNNNNNNNNNNNNNNNNNNNNLRNLRN#####NNNNNNNNNNNNNNN#NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#L##########NNNL############NNN###################################"
"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ "NNLNNNNLNNLLLLLLLLLLNLNNNLLLLLNNNNNNLNLNLNLLLL#"
"LLLNLLLLLLLNNLLLLNNNNNLLLLLNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ "NNNNNNNNNNNNNNNNNN##"
"NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
"NNNN",
'X' },
{ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
"NNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN####################"
"LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'L' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ nullptr, 'N' },
{ "NNNNNLLLNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLNNNNNNNLLLLLNNLLLLLNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLNLLLL",
'X' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLN",
'X' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN"
"NNNNNNNNNNNNNNNNNNNNNNNN",
'X' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL"
"LLLLLLLLLLLLLLLLLLLLLLLL",
'X' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ nullptr, 'L' },
{ "LLLLLLLLLLLLLLLLLLLLLLLLRRRRRRNRRRRRRRRRR#"
"RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR",
'X' },
{ nullptr, 'R' },
{ "RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"
"RRRRRRRRRRRRRRRRRRRRRNNN",
'X' },
{ "NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN#N#NN#NNNNNNNNN#NN##NNNNN##"
"NRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRNNN",
'X' },
{ "NNN###NNNNN################NNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL#####NNN##"
"NNNNNNNNNNNNNNNNNNNNNNNLL",
'X' }
};
static const UnicodeCaseTableVector caseTable00 = {
{ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b, 0x001c,
0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076,
0x0077, 0x0078, 0x0079, 0x007a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, 0x0070, 0x0071, 0x0072, 0x0073,
0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, 0x0090,
0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad,
0x00ae, 0x00af, 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x03bc, 0x00b6, 0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, 0x00e8, 0x00e9, 0x00ea,
0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00d7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00df, 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff }
};
static const UnicodeCaseTableVector caseTable01 = {
{ 0x0101, 0x0101, 0x0103, 0x0103, 0x0105, 0x0105, 0x0107, 0x0107, 0x0109, 0x0109, 0x010b, 0x010b, 0x010d, 0x010d, 0x010f, 0x010f, 0x0111, 0x0111, 0x0113, 0x0113, 0x0115, 0x0115, 0x0117, 0x0117, 0x0119, 0x0119, 0x011b, 0x011b, 0x011d,
0x011d, 0x011f, 0x011f, 0x0121, 0x0121, 0x0123, 0x0123, 0x0125, 0x0125, 0x0127, 0x0127, 0x0129, 0x0129, 0x012b, 0x012b, 0x012d, 0x012d, 0x012f, 0x012f, 0x0130, 0x0131, 0x0133, 0x0133, 0x0135, 0x0135, 0x0137, 0x0137, 0x0138, 0x013a,
0x013a, 0x013c, 0x013c, 0x013e, 0x013e, 0x0140, 0x0140, 0x0142, 0x0142, 0x0144, 0x0144, 0x0146, 0x0146, 0x0148, 0x0148, 0x0149, 0x014b, 0x014b, 0x014d, 0x014d, 0x014f, 0x014f, 0x0151, 0x0151, 0x0153, 0x0153, 0x0155, 0x0155, 0x0157,
0x0157, 0x0159, 0x0159, 0x015b, 0x015b, 0x015d, 0x015d, 0x015f, 0x015f, 0x0161, 0x0161, 0x0163, 0x0163, 0x0165, 0x0165, 0x0167, 0x0167, 0x0169, 0x0169, 0x016b, 0x016b, 0x016d, 0x016d, 0x016f, 0x016f, 0x0171, 0x0171, 0x0173, 0x0173,
0x0175, 0x0175, 0x0177, 0x0177, 0x00ff, 0x017a, 0x017a, 0x017c, 0x017c, 0x017e, 0x017e, 0x0073, 0x0180, 0x0253, 0x0183, 0x0183, 0x0185, 0x0185, 0x0254, 0x0188, 0x0188, 0x0256, 0x0257, 0x018c, 0x018c, 0x018d, 0x01dd, 0x0259, 0x025b,
0x0192, 0x0192, 0x0260, 0x0263, 0x0195, 0x0269, 0x0268, 0x0199, 0x0199, 0x019a, 0x019b, 0x026f, 0x0272, 0x019e, 0x0275, 0x01a1, 0x01a1, 0x01a3, 0x01a3, 0x01a5, 0x01a5, 0x0280, 0x01a8, 0x01a8, 0x0283, 0x01aa, 0x01ab, 0x01ad, 0x01ad,
0x0288, 0x01b0, 0x01b0, 0x028a, 0x028b, 0x01b4, 0x01b4, 0x01b6, 0x01b6, 0x0292, 0x01b9, 0x01b9, 0x01ba, 0x01bb, 0x01bd, 0x01bd, 0x01be, 0x01bf, 0x01c0, 0x01c1, 0x01c2, 0x01c3, 0x01c6, 0x01c6, 0x01c6, 0x01c9, 0x01c9, 0x01c9, 0x01cc,
0x01cc, 0x01cc, 0x01ce, 0x01ce, 0x01d0, 0x01d0, 0x01d2, 0x01d2, 0x01d4, 0x01d4, 0x01d6, 0x01d6, 0x01d8, 0x01d8, 0x01da, 0x01da, 0x01dc, 0x01dc, 0x01dd, 0x01df, 0x01df, 0x01e1, 0x01e1, 0x01e3, 0x01e3, 0x01e5, 0x01e5, 0x01e7, 0x01e7,
0x01e9, 0x01e9, 0x01eb, 0x01eb, 0x01ed, 0x01ed, 0x01ef, 0x01ef, 0x01f0, 0x01f3, 0x01f3, 0x01f3, 0x01f5, 0x01f5, 0x0195, 0x01bf, 0x01f9, 0x01f9, 0x01fb, 0x01fb, 0x01fd, 0x01fd, 0x01ff, 0x01ff }
};
static const UnicodeCaseTableVector caseTable02 = {
{ 0x0201, 0x0201, 0x0203, 0x0203, 0x0205, 0x0205, 0x0207, 0x0207, 0x0209, 0x0209, 0x020b, 0x020b, 0x020d, 0x020d, 0x020f, 0x020f, 0x0211, 0x0211, 0x0213, 0x0213, 0x0215, 0x0215, 0x0217, 0x0217, 0x0219, 0x0219, 0x021b, 0x021b, 0x021d,
0x021d, 0x021f, 0x021f, 0x019e, 0x0221, 0x0223, 0x0223, 0x0225, 0x0225, 0x0227, 0x0227, 0x0229, 0x0229, 0x022b, 0x022b, 0x022d, 0x022d, 0x022f, 0x022f, 0x0231, 0x0231, 0x0233, 0x0233, 0x0234, 0x0235, 0x0236, 0x0237, 0x0238, 0x0239,
0x023a, 0x023b, 0x023c, 0x023d, 0x023e, 0x023f, 0x0240, 0x0241, 0x0242, 0x0243, 0x0244, 0x0245, 0x0246, 0x0247, 0x0248, 0x0249, 0x024a, 0x024b, 0x024c, 0x024d, 0x024e, 0x024f, 0x0250, 0x0251, 0x0252, 0x0253, 0x0254, 0x0255, 0x0256,
0x0257, 0x0258, 0x0259, 0x025a, 0x025b, 0x025c, 0x025d, 0x025e, 0x025f, 0x0260, 0x0261, 0x0262, 0x0263, 0x0264, 0x0265, 0x0266, 0x0267, 0x0268, 0x0269, 0x026a, 0x026b, 0x026c, 0x026d, 0x026e, 0x026f, 0x0270, 0x0271, 0x0272, 0x0273,
0x0274, 0x0275, 0x0276, 0x0277, 0x0278, 0x0279, 0x027a, 0x027b, 0x027c, 0x027d, 0x027e, 0x027f, 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0286, 0x0287, 0x0288, 0x0289, 0x028a, 0x028b, 0x028c, 0x028d, 0x028e, 0x028f, 0x0290,
0x0291, 0x0292, 0x0293, 0x0294, 0x0295, 0x0296, 0x0297, 0x0298, 0x0299, 0x029a, 0x029b, 0x029c, 0x029d, 0x029e, 0x029f, 0x02a0, 0x02a1, 0x02a2, 0x02a3, 0x02a4, 0x02a5, 0x02a6, 0x02a7, 0x02a8, 0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad,
0x02ae, 0x02af, 0x02b0, 0x02b1, 0x02b2, 0x02b3, 0x02b4, 0x02b5, 0x02b6, 0x02b7, 0x02b8, 0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, 0x02c0, 0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c6, 0x02c7, 0x02c8, 0x02c9, 0x02ca,
0x02cb, 0x02cc, 0x02cd, 0x02ce, 0x02cf, 0x02d0, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6, 0x02d7, 0x02d8, 0x02d9, 0x02da, 0x02db, 0x02dc, 0x02dd, 0x02de, 0x02df, 0x02e0, 0x02e1, 0x02e2, 0x02e3, 0x02e4, 0x02e5, 0x02e6, 0x02e7,
0x02e8, 0x02e9, 0x02ea, 0x02eb, 0x02ec, 0x02ed, 0x02ee, 0x02ef, 0x02f0, 0x02f1, 0x02f2, 0x02f3, 0x02f4, 0x02f5, 0x02f6, 0x02f7, 0x02f8, 0x02f9, 0x02fa, 0x02fb, 0x02fc, 0x02fd, 0x02fe, 0x02ff }
};
static const UnicodeCaseTableVector caseTable03 = {
{ 0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307, 0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f, 0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317, 0x0318, 0x0319, 0x031a, 0x031b, 0x031c,
0x031d, 0x031e, 0x031f, 0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327, 0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f, 0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337, 0x0338, 0x0339,
0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f, 0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x03b9, 0x0346, 0x0347, 0x0348, 0x0349, 0x034a, 0x034b, 0x034c, 0x034d, 0x034e, 0x034f, 0x0350, 0x0351, 0x0352, 0x0353, 0x0354, 0x0355, 0x0356,
0x0357, 0x0358, 0x0359, 0x035a, 0x035b, 0x035c, 0x035d, 0x035e, 0x035f, 0x0360, 0x0361, 0x0362, 0x0363, 0x0364, 0x0365, 0x0366, 0x0367, 0x0368, 0x0369, 0x036a, 0x036b, 0x036c, 0x036d, 0x036e, 0x036f, 0x0370, 0x0371, 0x0372, 0x0373,
0x0374, 0x0375, 0x0376, 0x0377, 0x0378, 0x0379, 0x037a, 0x037b, 0x037c, 0x037d, 0x037e, 0x037f, 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x03ac, 0x0387, 0x03ad, 0x03ae, 0x03af, 0x038b, 0x03cc, 0x038d, 0x03cd, 0x03ce, 0x0390,
0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03a2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03ac, 0x03ad,
0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c3, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca,
0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x03cf, 0x03b2, 0x03b8, 0x03d2, 0x03d3, 0x03d4, 0x03c6, 0x03c0, 0x03d7, 0x03d9, 0x03d9, 0x03db, 0x03db, 0x03dd, 0x03dd, 0x03df, 0x03df, 0x03e1, 0x03e1, 0x03e3, 0x03e3, 0x03e5, 0x03e5, 0x03e7, 0x03e7,
0x03e9, 0x03e9, 0x03eb, 0x03eb, 0x03ed, 0x03ed, 0x03ef, 0x03ef, 0x03ba, 0x03c1, 0x03f2, 0x03f3, 0x03b8, 0x03b5, 0x03f6, 0x03f8, 0x03f8, 0x03f2, 0x03fb, 0x03fb, 0x03fc, 0x03fd, 0x03fe, 0x03ff }
};
static const UnicodeCaseTableVector caseTable04 = {
{ 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c,
0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439,
0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0450, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456,
0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045d, 0x045e, 0x045f, 0x0461, 0x0461, 0x0463, 0x0463, 0x0465, 0x0465, 0x0467, 0x0467, 0x0469, 0x0469, 0x046b, 0x046b, 0x046d, 0x046d, 0x046f, 0x046f, 0x0471, 0x0471, 0x0473, 0x0473,
0x0475, 0x0475, 0x0477, 0x0477, 0x0479, 0x0479, 0x047b, 0x047b, 0x047d, 0x047d, 0x047f, 0x047f, 0x0481, 0x0481, 0x0482, 0x0483, 0x0484, 0x0485, 0x0486, 0x0487, 0x0488, 0x0489, 0x048b, 0x048b, 0x048d, 0x048d, 0x048f, 0x048f, 0x0491,
0x0491, 0x0493, 0x0493, 0x0495, 0x0495, 0x0497, 0x0497, 0x0499, 0x0499, 0x049b, 0x049b, 0x049d, 0x049d, 0x049f, 0x049f, 0x04a1, 0x04a1, 0x04a3, 0x04a3, 0x04a5, 0x04a5, 0x04a7, 0x04a7, 0x04a9, 0x04a9, 0x04ab, 0x04ab, 0x04ad, 0x04ad,
0x04af, 0x04af, 0x04b1, 0x04b1, 0x04b3, 0x04b3, 0x04b5, 0x04b5, 0x04b7, 0x04b7, 0x04b9, 0x04b9, 0x04bb, 0x04bb, 0x04bd, 0x04bd, 0x04bf, 0x04bf, 0x04c0, 0x04c2, 0x04c2, 0x04c4, 0x04c4, 0x04c6, 0x04c6, 0x04c8, 0x04c8, 0x04ca, 0x04ca,
0x04cc, 0x04cc, 0x04ce, 0x04ce, 0x04cf, 0x04d1, 0x04d1, 0x04d3, 0x04d3, 0x04d5, 0x04d5, 0x04d7, 0x04d7, 0x04d9, 0x04d9, 0x04db, 0x04db, 0x04dd, 0x04dd, 0x04df, 0x04df, 0x04e1, 0x04e1, 0x04e3, 0x04e3, 0x04e5, 0x04e5, 0x04e7, 0x04e7,
0x04e9, 0x04e9, 0x04eb, 0x04eb, 0x04ed, 0x04ed, 0x04ef, 0x04ef, 0x04f1, 0x04f1, 0x04f3, 0x04f3, 0x04f5, 0x04f5, 0x04f6, 0x04f7, 0x04f9, 0x04f9, 0x04fa, 0x04fb, 0x04fc, 0x04fd, 0x04fe, 0x04ff }
};
static const UnicodeCaseTableVector caseTable05 = {
{ 0x0501, 0x0501, 0x0503, 0x0503, 0x0505, 0x0505, 0x0507, 0x0507, 0x0509, 0x0509, 0x050b, 0x050b, 0x050d, 0x050d, 0x050f, 0x050f, 0x0510, 0x0511, 0x0512, 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051a, 0x051b, 0x051c,
0x051d, 0x051e, 0x051f, 0x0520, 0x0521, 0x0522, 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052a, 0x052b, 0x052c, 0x052d, 0x052e, 0x052f, 0x0530, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569,
0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, 0x0570, 0x0571, 0x0572, 0x0573, 0x0574, 0x0575, 0x0576, 0x0577, 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586,
0x0557, 0x0558, 0x0559, 0x055a, 0x055b, 0x055c, 0x055d, 0x055e, 0x055f, 0x0560, 0x0561, 0x0562, 0x0563, 0x0564, 0x0565, 0x0566, 0x0567, 0x0568, 0x0569, 0x056a, 0x056b, 0x056c, 0x056d, 0x056e, 0x056f, 0x0570, 0x0571, 0x0572, 0x0573,
0x0574, 0x0575, 0x0576, 0x0577, 0x0578, 0x0579, 0x057a, 0x057b, 0x057c, 0x057d, 0x057e, 0x057f, 0x0580, 0x0581, 0x0582, 0x0583, 0x0584, 0x0585, 0x0586, 0x0587, 0x0588, 0x0589, 0x058a, 0x058b, 0x058c, 0x058d, 0x058e, 0x058f, 0x0590,
0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596, 0x0597, 0x0598, 0x0599, 0x059a, 0x059b, 0x059c, 0x059d, 0x059e, 0x059f, 0x05a0, 0x05a1, 0x05a2, 0x05a3, 0x05a4, 0x05a5, 0x05a6, 0x05a7, 0x05a8, 0x05a9, 0x05aa, 0x05ab, 0x05ac, 0x05ad,
0x05ae, 0x05af, 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6, 0x05b7, 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05be, 0x05bf, 0x05c0, 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, 0x05ca,
0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7,
0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x05f3, 0x05f4, 0x05f5, 0x05f6, 0x05f7, 0x05f8, 0x05f9, 0x05fa, 0x05fb, 0x05fc, 0x05fd, 0x05fe, 0x05ff }
};
static const UnicodeCaseTableVector caseTable1e = {
{ 0x1e01, 0x1e01, 0x1e03, 0x1e03, 0x1e05, 0x1e05, 0x1e07, 0x1e07, 0x1e09, 0x1e09, 0x1e0b, 0x1e0b, 0x1e0d, 0x1e0d, 0x1e0f, 0x1e0f, 0x1e11, 0x1e11, 0x1e13, 0x1e13, 0x1e15, 0x1e15, 0x1e17, 0x1e17, 0x1e19, 0x1e19, 0x1e1b, 0x1e1b, 0x1e1d,
0x1e1d, 0x1e1f, 0x1e1f, 0x1e21, 0x1e21, 0x1e23, 0x1e23, 0x1e25, 0x1e25, 0x1e27, 0x1e27, 0x1e29, 0x1e29, 0x1e2b, 0x1e2b, 0x1e2d, 0x1e2d, 0x1e2f, 0x1e2f, 0x1e31, 0x1e31, 0x1e33, 0x1e33, 0x1e35, 0x1e35, 0x1e37, 0x1e37, 0x1e39, 0x1e39,
0x1e3b, 0x1e3b, 0x1e3d, 0x1e3d, 0x1e3f, 0x1e3f, 0x1e41, 0x1e41, 0x1e43, 0x1e43, 0x1e45, 0x1e45, 0x1e47, 0x1e47, 0x1e49, 0x1e49, 0x1e4b, 0x1e4b, 0x1e4d, 0x1e4d, 0x1e4f, 0x1e4f, 0x1e51, 0x1e51, 0x1e53, 0x1e53, 0x1e55, 0x1e55, 0x1e57,
0x1e57, 0x1e59, 0x1e59, 0x1e5b, 0x1e5b, 0x1e5d, 0x1e5d, 0x1e5f, 0x1e5f, 0x1e61, 0x1e61, 0x1e63, 0x1e63, 0x1e65, 0x1e65, 0x1e67, 0x1e67, 0x1e69, 0x1e69, 0x1e6b, 0x1e6b, 0x1e6d, 0x1e6d, 0x1e6f, 0x1e6f, 0x1e71, 0x1e71, 0x1e73, 0x1e73,
0x1e75, 0x1e75, 0x1e77, 0x1e77, 0x1e79, 0x1e79, 0x1e7b, 0x1e7b, 0x1e7d, 0x1e7d, 0x1e7f, 0x1e7f, 0x1e81, 0x1e81, 0x1e83, 0x1e83, 0x1e85, 0x1e85, 0x1e87, 0x1e87, 0x1e89, 0x1e89, 0x1e8b, 0x1e8b, 0x1e8d, 0x1e8d, 0x1e8f, 0x1e8f, 0x1e91,
0x1e91, 0x1e93, 0x1e93, 0x1e95, 0x1e95, 0x1e96, 0x1e97, 0x1e98, 0x1e99, 0x1e9a, 0x1e61, 0x1e9c, 0x1e9d, 0x1e9e, 0x1e9f, 0x1ea1, 0x1ea1, 0x1ea3, 0x1ea3, 0x1ea5, 0x1ea5, 0x1ea7, 0x1ea7, 0x1ea9, 0x1ea9, 0x1eab, 0x1eab, 0x1ead, 0x1ead,
0x1eaf, 0x1eaf, 0x1eb1, 0x1eb1, 0x1eb3, 0x1eb3, 0x1eb5, 0x1eb5, 0x1eb7, 0x1eb7, 0x1eb9, 0x1eb9, 0x1ebb, 0x1ebb, 0x1ebd, 0x1ebd, 0x1ebf, 0x1ebf, 0x1ec1, 0x1ec1, 0x1ec3, 0x1ec3, 0x1ec5, 0x1ec5, 0x1ec7, 0x1ec7, 0x1ec9, 0x1ec9, 0x1ecb,
0x1ecb, 0x1ecd, 0x1ecd, 0x1ecf, 0x1ecf, 0x1ed1, 0x1ed1, 0x1ed3, 0x1ed3, 0x1ed5, 0x1ed5, 0x1ed7, 0x1ed7, 0x1ed9, 0x1ed9, 0x1edb, 0x1edb, 0x1edd, 0x1edd, 0x1edf, 0x1edf, 0x1ee1, 0x1ee1, 0x1ee3, 0x1ee3, 0x1ee5, 0x1ee5, 0x1ee7, 0x1ee7,
0x1ee9, 0x1ee9, 0x1eeb, 0x1eeb, 0x1eed, 0x1eed, 0x1eef, 0x1eef, 0x1ef1, 0x1ef1, 0x1ef3, 0x1ef3, 0x1ef5, 0x1ef5, 0x1ef7, 0x1ef7, 0x1ef9, 0x1ef9, 0x1efa, 0x1efb, 0x1efc, 0x1efd, 0x1efe, 0x1eff }
};
static const UnicodeCaseTableVector caseTable1f = {
{ 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f00, 0x1f01, 0x1f02, 0x1f03, 0x1f04, 0x1f05, 0x1f06, 0x1f07, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14, 0x1f15, 0x1f16, 0x1f17, 0x1f10, 0x1f11, 0x1f12, 0x1f13, 0x1f14,
0x1f15, 0x1f1e, 0x1f1f, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f20, 0x1f21, 0x1f22, 0x1f23, 0x1f24, 0x1f25, 0x1f26, 0x1f27, 0x1f30, 0x1f31, 0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, 0x1f30, 0x1f31,
0x1f32, 0x1f33, 0x1f34, 0x1f35, 0x1f36, 0x1f37, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f46, 0x1f47, 0x1f40, 0x1f41, 0x1f42, 0x1f43, 0x1f44, 0x1f45, 0x1f4e, 0x1f4f, 0x1f50, 0x1f51, 0x1f52, 0x1f53, 0x1f54, 0x1f55, 0x1f56,
0x1f57, 0x1f58, 0x1f51, 0x1f5a, 0x1f53, 0x1f5c, 0x1f55, 0x1f5e, 0x1f57, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1f60, 0x1f61, 0x1f62, 0x1f63, 0x1f64, 0x1f65, 0x1f66, 0x1f67, 0x1f70, 0x1f71, 0x1f72, 0x1f73,
0x1f74, 0x1f75, 0x1f76, 0x1f77, 0x1f78, 0x1f79, 0x1f7a, 0x1f7b, 0x1f7c, 0x1f7d, 0x1f7e, 0x1f7f, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f80, 0x1f81, 0x1f82, 0x1f83, 0x1f84, 0x1f85, 0x1f86, 0x1f87, 0x1f90,
0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1f90, 0x1f91, 0x1f92, 0x1f93, 0x1f94, 0x1f95, 0x1f96, 0x1f97, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5, 0x1fa6, 0x1fa7, 0x1fa0, 0x1fa1, 0x1fa2, 0x1fa3, 0x1fa4, 0x1fa5,
0x1fa6, 0x1fa7, 0x1fb0, 0x1fb1, 0x1fb2, 0x1fb3, 0x1fb4, 0x1fb5, 0x1fb6, 0x1fb7, 0x1fb0, 0x1fb1, 0x1f70, 0x1f71, 0x1fb3, 0x1fbd, 0x03b9, 0x1fbf, 0x1fc0, 0x1fc1, 0x1fc2, 0x1fc3, 0x1fc4, 0x1fc5, 0x1fc6, 0x1fc7, 0x1f72, 0x1f73, 0x1f74,
0x1f75, 0x1fc3, 0x1fcd, 0x1fce, 0x1fcf, 0x1fd0, 0x1fd1, 0x1fd2, 0x1fd3, 0x1fd4, 0x1fd5, 0x1fd6, 0x1fd7, 0x1fd0, 0x1fd1, 0x1f76, 0x1f77, 0x1fdc, 0x1fdd, 0x1fde, 0x1fdf, 0x1fe0, 0x1fe1, 0x1fe2, 0x1fe3, 0x1fe4, 0x1fe5, 0x1fe6, 0x1fe7,
0x1fe0, 0x1fe1, 0x1f7a, 0x1f7b, 0x1fe5, 0x1fed, 0x1fee, 0x1fef, 0x1ff0, 0x1ff1, 0x1ff2, 0x1ff3, 0x1ff4, 0x1ff5, 0x1ff6, 0x1ff7, 0x1f78, 0x1f79, 0x1f7c, 0x1f7d, 0x1ff3, 0x1ffd, 0x1ffe, 0x1fff }
};
static const UnicodeCaseTableVector caseTable21 = {
{ 0x2100, 0x2101, 0x2102, 0x2103, 0x2104, 0x2105, 0x2106, 0x2107, 0x2108, 0x2109, 0x210a, 0x210b, 0x210c, 0x210d, 0x210e, 0x210f, 0x2110, 0x2111, 0x2112, 0x2113, 0x2114, 0x2115, 0x2116, 0x2117, 0x2118, 0x2119, 0x211a, 0x211b, 0x211c,
0x211d, 0x211e, 0x211f, 0x2120, 0x2121, 0x2122, 0x2123, 0x2124, 0x2125, 0x03c9, 0x2127, 0x2128, 0x2129, 0x006b, 0x00e5, 0x212c, 0x212d, 0x212e, 0x212f, 0x2130, 0x2131, 0x2132, 0x2133, 0x2134, 0x2135, 0x2136, 0x2137, 0x2138, 0x2139,
0x213a, 0x213b, 0x213c, 0x213d, 0x213e, 0x213f, 0x2140, 0x2141, 0x2142, 0x2143, 0x2144, 0x2145, 0x2146, 0x2147, 0x2148, 0x2149, 0x214a, 0x214b, 0x214c, 0x214d, 0x214e, 0x214f, 0x2150, 0x2151, 0x2152, 0x2153, 0x2154, 0x2155, 0x2156,
0x2157, 0x2158, 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x215f, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, 0x2170, 0x2171, 0x2172, 0x2173,
0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0x217a, 0x217b, 0x217c, 0x217d, 0x217e, 0x217f, 0x2180, 0x2181, 0x2182, 0x2183, 0x2184, 0x2185, 0x2186, 0x2187, 0x2188, 0x2189, 0x218a, 0x218b, 0x218c, 0x218d, 0x218e, 0x218f, 0x2190,
0x2191, 0x2192, 0x2193, 0x2194, 0x2195, 0x2196, 0x2197, 0x2198, 0x2199, 0x219a, 0x219b, 0x219c, 0x219d, 0x219e, 0x219f, 0x21a0, 0x21a1, 0x21a2, 0x21a3, 0x21a4, 0x21a5, 0x21a6, 0x21a7, 0x21a8, 0x21a9, 0x21aa, 0x21ab, 0x21ac, 0x21ad,
0x21ae, 0x21af, 0x21b0, 0x21b1, 0x21b2, 0x21b3, 0x21b4, 0x21b5, 0x21b6, 0x21b7, 0x21b8, 0x21b9, 0x21ba, 0x21bb, 0x21bc, 0x21bd, 0x21be, 0x21bf, 0x21c0, 0x21c1, 0x21c2, 0x21c3, 0x21c4, 0x21c5, 0x21c6, 0x21c7, 0x21c8, 0x21c9, 0x21ca,
0x21cb, 0x21cc, 0x21cd, 0x21ce, 0x21cf, 0x21d0, 0x21d1, 0x21d2, 0x21d3, 0x21d4, 0x21d5, 0x21d6, 0x21d7, 0x21d8, 0x21d9, 0x21da, 0x21db, 0x21dc, 0x21dd, 0x21de, 0x21df, 0x21e0, 0x21e1, 0x21e2, 0x21e3, 0x21e4, 0x21e5, 0x21e6, 0x21e7,
0x21e8, 0x21e9, 0x21ea, 0x21eb, 0x21ec, 0x21ed, 0x21ee, 0x21ef, 0x21f0, 0x21f1, 0x21f2, 0x21f3, 0x21f4, 0x21f5, 0x21f6, 0x21f7, 0x21f8, 0x21f9, 0x21fa, 0x21fb, 0x21fc, 0x21fd, 0x21fe, 0x21ff }
};
static const UnicodeCaseTableVector caseTable24 = {
{ 0x2400, 0x2401, 0x2402, 0x2403, 0x2404, 0x2405, 0x2406, 0x2407, 0x2408, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x240e, 0x240f, 0x2410, 0x2411, 0x2412, 0x2413, 0x2414, 0x2415, 0x2416, 0x2417, 0x2418, 0x2419, 0x241a, 0x241b, 0x241c,
0x241d, 0x241e, 0x241f, 0x2420, 0x2421, 0x2422, 0x2423, 0x2424, 0x2425, 0x2426, 0x2427, 0x2428, 0x2429, 0x242a, 0x242b, 0x242c, 0x242d, 0x242e, 0x242f, 0x2430, 0x2431, 0x2432, 0x2433, 0x2434, 0x2435, 0x2436, 0x2437, 0x2438, 0x2439,
0x243a, 0x243b, 0x243c, 0x243d, 0x243e, 0x243f, 0x2440, 0x2441, 0x2442, 0x2443, 0x2444, 0x2445, 0x2446, 0x2447, 0x2448, 0x2449, 0x244a, 0x244b, 0x244c, 0x244d, 0x244e, 0x244f, 0x2450, 0x2451, 0x2452, 0x2453, 0x2454, 0x2455, 0x2456,
0x2457, 0x2458, 0x2459, 0x245a, 0x245b, 0x245c, 0x245d, 0x245e, 0x245f, 0x2460, 0x2461, 0x2462, 0x2463, 0x2464, 0x2465, 0x2466, 0x2467, 0x2468, 0x2469, 0x246a, 0x246b, 0x246c, 0x246d, 0x246e, 0x246f, 0x2470, 0x2471, 0x2472, 0x2473,
0x2474, 0x2475, 0x2476, 0x2477, 0x2478, 0x2479, 0x247a, 0x247b, 0x247c, 0x247d, 0x247e, 0x247f, 0x2480, 0x2481, 0x2482, 0x2483, 0x2484, 0x2485, 0x2486, 0x2487, 0x2488, 0x2489, 0x248a, 0x248b, 0x248c, 0x248d, 0x248e, 0x248f, 0x2490,
0x2491, 0x2492, 0x2493, 0x2494, 0x2495, 0x2496, 0x2497, 0x2498, 0x2499, 0x249a, 0x249b, 0x249c, 0x249d, 0x249e, 0x249f, 0x24a0, 0x24a1, 0x24a2, 0x24a3, 0x24a4, 0x24a5, 0x24a6, 0x24a7, 0x24a8, 0x24a9, 0x24aa, 0x24ab, 0x24ac, 0x24ad,
0x24ae, 0x24af, 0x24b0, 0x24b1, 0x24b2, 0x24b3, 0x24b4, 0x24b5, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4,
0x24e5, 0x24e6, 0x24e7, 0x24e8, 0x24e9, 0x24d0, 0x24d1, 0x24d2, 0x24d3, 0x24d4, 0x24d5, 0x24d6, 0x24d7, 0x24d8, 0x24d9, 0x24da, 0x24db, 0x24dc, 0x24dd, 0x24de, 0x24df, 0x24e0, 0x24e1, 0x24e2, 0x24e3, 0x24e4, 0x24e5, 0x24e6, 0x24e7,
0x24e8, 0x24e9, 0x24ea, 0x24eb, 0x24ec, 0x24ed, 0x24ee, 0x24ef, 0x24f0, 0x24f1, 0x24f2, 0x24f3, 0x24f4, 0x24f5, 0x24f6, 0x24f7, 0x24f8, 0x24f9, 0x24fa, 0x24fb, 0x24fc, 0x24fd, 0x24fe, 0x24ff }
};
static const UnicodeCaseTableVector caseTableff = {
{ 0xff00, 0xff01, 0xff02, 0xff03, 0xff04, 0xff05, 0xff06, 0xff07, 0xff08, 0xff09, 0xff0a, 0xff0b, 0xff0c, 0xff0d, 0xff0e, 0xff0f, 0xff10, 0xff11, 0xff12, 0xff13, 0xff14, 0xff15, 0xff16, 0xff17, 0xff18, 0xff19, 0xff1a, 0xff1b, 0xff1c,
0xff1d, 0xff1e, 0xff1f, 0xff20, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56, 0xff57, 0xff58, 0xff59,
0xff5a, 0xff3b, 0xff3c, 0xff3d, 0xff3e, 0xff3f, 0xff40, 0xff41, 0xff42, 0xff43, 0xff44, 0xff45, 0xff46, 0xff47, 0xff48, 0xff49, 0xff4a, 0xff4b, 0xff4c, 0xff4d, 0xff4e, 0xff4f, 0xff50, 0xff51, 0xff52, 0xff53, 0xff54, 0xff55, 0xff56,
0xff57, 0xff58, 0xff59, 0xff5a, 0xff5b, 0xff5c, 0xff5d, 0xff5e, 0xff5f, 0xff60, 0xff61, 0xff62, 0xff63, 0xff64, 0xff65, 0xff66, 0xff67, 0xff68, 0xff69, 0xff6a, 0xff6b, 0xff6c, 0xff6d, 0xff6e, 0xff6f, 0xff70, 0xff71, 0xff72, 0xff73,
0xff74, 0xff75, 0xff76, 0xff77, 0xff78, 0xff79, 0xff7a, 0xff7b, 0xff7c, 0xff7d, 0xff7e, 0xff7f, 0xff80, 0xff81, 0xff82, 0xff83, 0xff84, 0xff85, 0xff86, 0xff87, 0xff88, 0xff89, 0xff8a, 0xff8b, 0xff8c, 0xff8d, 0xff8e, 0xff8f, 0xff90,
0xff91, 0xff92, 0xff93, 0xff94, 0xff95, 0xff96, 0xff97, 0xff98, 0xff99, 0xff9a, 0xff9b, 0xff9c, 0xff9d, 0xff9e, 0xff9f, 0xffa0, 0xffa1, 0xffa2, 0xffa3, 0xffa4, 0xffa5, 0xffa6, 0xffa7, 0xffa8, 0xffa9, 0xffaa, 0xffab, 0xffac, 0xffad,
0xffae, 0xffaf, 0xffb0, 0xffb1, 0xffb2, 0xffb3, 0xffb4, 0xffb5, 0xffb6, 0xffb7, 0xffb8, 0xffb9, 0xffba, 0xffbb, 0xffbc, 0xffbd, 0xffbe, 0xffbf, 0xffc0, 0xffc1, 0xffc2, 0xffc3, 0xffc4, 0xffc5, 0xffc6, 0xffc7, 0xffc8, 0xffc9, 0xffca,
0xffcb, 0xffcc, 0xffcd, 0xffce, 0xffcf, 0xffd0, 0xffd1, 0xffd2, 0xffd3, 0xffd4, 0xffd5, 0xffd6, 0xffd7, 0xffd8, 0xffd9, 0xffda, 0xffdb, 0xffdc, 0xffdd, 0xffde, 0xffdf, 0xffe0, 0xffe1, 0xffe2, 0xffe3, 0xffe4, 0xffe5, 0xffe6, 0xffe7,
0xffe8, 0xffe9, 0xffea, 0xffeb, 0xffec, 0xffed, 0xffee, 0xffef, 0xfff0, 0xfff1, 0xfff2, 0xfff3, 0xfff4, 0xfff5, 0xfff6, 0xfff7, 0xfff8, 0xfff9, 0xfffa, 0xfffb, 0xfffc, 0xfffd, 0xfffe, 0xffff }
};
static const UnicodeCaseTableVector caseTable104 = { {
0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407, 0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417,
0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f, 0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x10400, 0x10401, 0x10402, 0x10403, 0x10404, 0x10405, 0x10406, 0x10407,
0x10408, 0x10409, 0x1040a, 0x1040b, 0x1040c, 0x1040d, 0x1040e, 0x1040f, 0x10410, 0x10411, 0x10412, 0x10413, 0x10414, 0x10415, 0x10416, 0x10417, 0x10418, 0x10419, 0x1041a, 0x1041b, 0x1041c, 0x1041d, 0x1041e, 0x1041f,
0x10420, 0x10421, 0x10422, 0x10423, 0x10424, 0x10425, 0x10426, 0x10427, 0x10450, 0x10451, 0x10452, 0x10453, 0x10454, 0x10455, 0x10456, 0x10457, 0x10458, 0x10459, 0x1045a, 0x1045b, 0x1045c, 0x1045d, 0x1045e, 0x1045f,
0x10460, 0x10461, 0x10462, 0x10463, 0x10464, 0x10465, 0x10466, 0x10467, 0x10468, 0x10469, 0x1046a, 0x1046b, 0x1046c, 0x1046d, 0x1046e, 0x1046f, 0x10470, 0x10471, 0x10472, 0x10473, 0x10474, 0x10475, 0x10476, 0x10477,
0x10478, 0x10479, 0x1047a, 0x1047b, 0x1047c, 0x1047d, 0x1047e, 0x1047f, 0x10480, 0x10481, 0x10482, 0x10483, 0x10484, 0x10485, 0x10486, 0x10487, 0x10488, 0x10489, 0x1048a, 0x1048b, 0x1048c, 0x1048d, 0x1048e, 0x1048f,
0x10490, 0x10491, 0x10492, 0x10493, 0x10494, 0x10495, 0x10496, 0x10497, 0x10498, 0x10499, 0x1049a, 0x1049b, 0x1049c, 0x1049d, 0x1049e, 0x1049f, 0x104a0, 0x104a1, 0x104a2, 0x104a3, 0x104a4, 0x104a5, 0x104a6, 0x104a7,
0x104a8, 0x104a9, 0x104aa, 0x104ab, 0x104ac, 0x104ad, 0x104ae, 0x104af, 0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf,
0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7, 0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x104d4, 0x104d5, 0x104d6, 0x104d7,
0x104b0, 0x104b1, 0x104b2, 0x104b3, 0x104b4, 0x104b5, 0x104b6, 0x104b7, 0x104b8, 0x104b9, 0x104ba, 0x104bb, 0x104bc, 0x104bd, 0x104be, 0x104bf, 0x104c0, 0x104c1, 0x104c2, 0x104c3, 0x104c4, 0x104c5, 0x104c6, 0x104c7,
0x104c8, 0x104c9, 0x104ca, 0x104cb, 0x104cc, 0x104cd, 0x104ce, 0x104cf, 0x104d0, 0x104d1, 0x104d2, 0x104d3, 0x104fc, 0x104fd, 0x104fe, 0x104ff,
} };
static const UnicodeCaseTableVector caseTable10c = { {
0x10c00, 0x10c01, 0x10c02, 0x10c03, 0x10c04, 0x10c05, 0x10c06, 0x10c07, 0x10c08, 0x10c09, 0x10c0a, 0x10c0b, 0x10c0c, 0x10c0d, 0x10c0e, 0x10c0f, 0x10c10, 0x10c11, 0x10c12, 0x10c13, 0x10c14, 0x10c15, 0x10c16, 0x10c17, 0x10c18,
0x10c19, 0x10c1a, 0x10c1b, 0x10c1c, 0x10c1d, 0x10c1e, 0x10c1f, 0x10c20, 0x10c21, 0x10c22, 0x10c23, 0x10c24, 0x10c25, 0x10c26, 0x10c27, 0x10c28, 0x10c29, 0x10c2a, 0x10c2b, 0x10c2c, 0x10c2d, 0x10c2e, 0x10c2f, 0x10c30, 0x10c31,
0x10c32, 0x10c33, 0x10c34, 0x10c35, 0x10c36, 0x10c37, 0x10c38, 0x10c39, 0x10c3a, 0x10c3b, 0x10c3c, 0x10c3d, 0x10c3e, 0x10c3f, 0x10c40, 0x10c41, 0x10c42, 0x10c43, 0x10c44, 0x10c45, 0x10c46, 0x10c47, 0x10c48, 0x10c49, 0x10c4a,
0x10c4b, 0x10c4c, 0x10c4d, 0x10c4e, 0x10c4f, 0x10c50, 0x10c51, 0x10c52, 0x10c53, 0x10c54, 0x10c55, 0x10c56, 0x10c57, 0x10c58, 0x10c59, 0x10c5a, 0x10c5b, 0x10c5c, 0x10c5d, 0x10c5e, 0x10c5f, 0x10c60, 0x10c61, 0x10c62, 0x10c63,
0x10c64, 0x10c65, 0x10c66, 0x10c67, 0x10c68, 0x10c69, 0x10c6a, 0x10c6b, 0x10c6c, 0x10c6d, 0x10c6e, 0x10c6f, 0x10c70, 0x10c71, 0x10c72, 0x10c73, 0x10c74, 0x10c75, 0x10c76, 0x10c77, 0x10c78, 0x10c79, 0x10c7a, 0x10c7b, 0x10c7c,
0x10c7d, 0x10c7e, 0x10c7f, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87, 0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95,
0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0, 0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae,
0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x10cb3, 0x10cb4, 0x10cb5, 0x10cb6, 0x10cb7, 0x10cb8, 0x10cb9, 0x10cba, 0x10cbb, 0x10cbc, 0x10cbd, 0x10cbe, 0x10cbf, 0x10c80, 0x10c81, 0x10c82, 0x10c83, 0x10c84, 0x10c85, 0x10c86, 0x10c87,
0x10c88, 0x10c89, 0x10c8a, 0x10c8b, 0x10c8c, 0x10c8d, 0x10c8e, 0x10c8f, 0x10c90, 0x10c91, 0x10c92, 0x10c93, 0x10c94, 0x10c95, 0x10c96, 0x10c97, 0x10c98, 0x10c99, 0x10c9a, 0x10c9b, 0x10c9c, 0x10c9d, 0x10c9e, 0x10c9f, 0x10ca0,
0x10ca1, 0x10ca2, 0x10ca3, 0x10ca4, 0x10ca5, 0x10ca6, 0x10ca7, 0x10ca8, 0x10ca9, 0x10caa, 0x10cab, 0x10cac, 0x10cad, 0x10cae, 0x10caf, 0x10cb0, 0x10cb1, 0x10cb2, 0x10cf3, 0x10cf4, 0x10cf5, 0x10cf6, 0x10cf7,
} };
static const UnicodeCaseTableVector caseTable118 = { {
0x11800, 0x11801, 0x11802, 0x11803, 0x11804, 0x11805, 0x11806, 0x11807, 0x11808, 0x11809, 0x1180a, 0x1180b, 0x1180c, 0x1180d, 0x1180e, 0x1180f, 0x11810, 0x11811, 0x11812, 0x11813, 0x11814, 0x11815, 0x11816, 0x11817, 0x11818,
0x11819, 0x1181a, 0x1181b, 0x1181c, 0x1181d, 0x1181e, 0x1181f, 0x11820, 0x11821, 0x11822, 0x11823, 0x11824, 0x11825, 0x11826, 0x11827, 0x11828, 0x11829, 0x1182a, 0x1182b, 0x1182c, 0x1182d, 0x1182e, 0x1182f, 0x11830, 0x11831,
0x11832, 0x11833, 0x11834, 0x11835, 0x11836, 0x11837, 0x11838, 0x11839, 0x1183a, 0x1183b, 0x1183c, 0x1183d, 0x1183e, 0x1183f, 0x11840, 0x11841, 0x11842, 0x11843, 0x11844, 0x11845, 0x11846, 0x11847, 0x11848, 0x11849, 0x1184a,
0x1184b, 0x1184c, 0x1184d, 0x1184e, 0x1184f, 0x11850, 0x11851, 0x11852, 0x11853, 0x11854, 0x11855, 0x11856, 0x11857, 0x11858, 0x11859, 0x1185a, 0x1185b, 0x1185c, 0x1185d, 0x1185e, 0x1185f, 0x11860, 0x11861, 0x11862, 0x11863,
0x11864, 0x11865, 0x11866, 0x11867, 0x11868, 0x11869, 0x1186a, 0x1186b, 0x1186c, 0x1186d, 0x1186e, 0x1186f, 0x11870, 0x11871, 0x11872, 0x11873, 0x11874, 0x11875, 0x11876, 0x11877, 0x11878, 0x11879, 0x1187a, 0x1187b, 0x1187c,
0x1187d, 0x1187e, 0x1187f, 0x11880, 0x11881, 0x11882, 0x11883, 0x11884, 0x11885, 0x11886, 0x11887, 0x11888, 0x11889, 0x1188a, 0x1188b, 0x1188c, 0x1188d, 0x1188e, 0x1188f, 0x11890, 0x11891, 0x11892, 0x11893, 0x11894, 0x11895,
0x11896, 0x11897, 0x11898, 0x11899, 0x1189a, 0x1189b, 0x1189c, 0x1189d, 0x1189e, 0x1189f, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7, 0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae,
0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x118a0, 0x118a1, 0x118a2, 0x118a3, 0x118a4, 0x118a5, 0x118a6, 0x118a7,
0x118a8, 0x118a9, 0x118aa, 0x118ab, 0x118ac, 0x118ad, 0x118ae, 0x118af, 0x118b0, 0x118b1, 0x118b2, 0x118b3, 0x118b4, 0x118b5, 0x118b6, 0x118b7, 0x118b8, 0x118b9, 0x118ba, 0x118bb, 0x118bc, 0x118bd, 0x118be, 0x118bf, 0x118e0,
0x118e1, 0x118e2, 0x118e3, 0x118e4, 0x118e5, 0x118e6, 0x118e7, 0x118e8, 0x118e9, 0x118ea, 0x118eb, 0x118ec, 0x118ed, 0x118ee, 0x118ef, 0x118f0, 0x118f1, 0x118f2, 0x118f3, 0x118f4, 0x118f5, 0x118f6, 0x118f7,
} };
static const UnicodeCaseTableVector caseTable16e = { {
0x16e00, 0x16e01, 0x16e02, 0x16e03, 0x16e04, 0x16e05, 0x16e06, 0x16e07, 0x16e08, 0x16e09, 0x16e0a, 0x16e0b, 0x16e0c, 0x16e0d, 0x16e0e, 0x16e0f, 0x16e10, 0x16e11, 0x16e12, 0x16e13, 0x16e14, 0x16e15, 0x16e16, 0x16e17, 0x16e18,
0x16e19, 0x16e1a, 0x16e1b, 0x16e1c, 0x16e1d, 0x16e1e, 0x16e1f, 0x16e20, 0x16e21, 0x16e22, 0x16e23, 0x16e24, 0x16e25, 0x16e26, 0x16e27, 0x16e28, 0x16e29, 0x16e2a, 0x16e2b, 0x16e2c, 0x16e2d, 0x16e2e, 0x16e2f, 0x16e30, 0x16e31,
0x16e32, 0x16e33, 0x16e34, 0x16e35, 0x16e36, 0x16e37, 0x16e38, 0x16e39, 0x16e3a, 0x16e3b, 0x16e3c, 0x16e3d, 0x16e3e, 0x16e3f, 0x16e40, 0x16e41, 0x16e42, 0x16e43, 0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a,
0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c, 0x16e5d, 0x16e5e, 0x16e5f, 0x16e40, 0x16e41, 0x16e42, 0x16e43,
0x16e44, 0x16e45, 0x16e46, 0x16e47, 0x16e48, 0x16e49, 0x16e4a, 0x16e4b, 0x16e4c, 0x16e4d, 0x16e4e, 0x16e4f, 0x16e50, 0x16e51, 0x16e52, 0x16e53, 0x16e54, 0x16e55, 0x16e56, 0x16e57, 0x16e58, 0x16e59, 0x16e5a, 0x16e5b, 0x16e5c,
0x16e5d, 0x16e5e, 0x16e5f, 0x16e80, 0x16e81, 0x16e82, 0x16e83, 0x16e84, 0x16e85, 0x16e86, 0x16e87, 0x16e88, 0x16e89, 0x16e8a, 0x16e8b, 0x16e8c, 0x16e8d, 0x16e8e, 0x16e8f, 0x16e90, 0x16e91, 0x16e92, 0x16e93, 0x16e94, 0x16e95,
0x16e96, 0x16e97, 0x16e98, 0x16e99, 0x16e9a, 0x16e9b, 0x16e9c, 0x16e9d, 0x16e9e, 0x16e9f, 0x16ea0, 0x16ea1, 0x16ea2, 0x16ea3, 0x16ea4, 0x16ea5, 0x16ea6, 0x16ea7, 0x16ea8, 0x16ea9, 0x16eaa, 0x16eab, 0x16eac, 0x16ead, 0x16eae,
0x16eaf, 0x16eb0, 0x16eb1, 0x16eb2, 0x16eb3, 0x16eb4, 0x16eb5, 0x16eb6, 0x16eb7, 0x16eb8, 0x16eb9, 0x16eba, 0x16ebb, 0x16ebc, 0x16ebd, 0x16ebe, 0x16ebf, 0x16ec0, 0x16ec1, 0x16ec2, 0x16ec3, 0x16ec4, 0x16ec5, 0x16ec6, 0x16ec7,
0x16ec8, 0x16ec9, 0x16eca, 0x16ecb, 0x16ecc, 0x16ecd, 0x16ece, 0x16ecf, 0x16ed0, 0x16ed1, 0x16ed2, 0x16ed3, 0x16ed4, 0x16ed5, 0x16ed6, 0x16ed7, 0x16ed8, 0x16ed9, 0x16eda, 0x16edb, 0x16edc, 0x16edd, 0x16ede, 0x16edf, 0x16ee0,
0x16ee1, 0x16ee2, 0x16ee3, 0x16ee4, 0x16ee5, 0x16ee6, 0x16ee7, 0x16ee8, 0x16ee9, 0x16eea, 0x16eeb, 0x16eec, 0x16eed, 0x16eee, 0x16eef, 0x16ef0, 0x16ef1, 0x16ef2, 0x16ef3, 0x16ef4, 0x16ef5, 0x16ef6, 0x16ef7,
} };
static const UnicodeCaseTableVector caseTable1e9 = { {
0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f, 0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918,
0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x1e900, 0x1e901, 0x1e902, 0x1e903, 0x1e904, 0x1e905, 0x1e906, 0x1e907, 0x1e908, 0x1e909, 0x1e90a, 0x1e90b, 0x1e90c, 0x1e90d, 0x1e90e, 0x1e90f,
0x1e910, 0x1e911, 0x1e912, 0x1e913, 0x1e914, 0x1e915, 0x1e916, 0x1e917, 0x1e918, 0x1e919, 0x1e91a, 0x1e91b, 0x1e91c, 0x1e91d, 0x1e91e, 0x1e91f, 0x1e920, 0x1e921, 0x1e944, 0x1e945, 0x1e946, 0x1e947, 0x1e948, 0x1e949, 0x1e94a,
0x1e94b, 0x1e94c, 0x1e94d, 0x1e94e, 0x1e94f, 0x1e950, 0x1e951, 0x1e952, 0x1e953, 0x1e954, 0x1e955, 0x1e956, 0x1e957, 0x1e958, 0x1e959, 0x1e95a, 0x1e95b, 0x1e95c, 0x1e95d, 0x1e95e, 0x1e95f, 0x1e960, 0x1e961, 0x1e962, 0x1e963,
0x1e964, 0x1e965, 0x1e966, 0x1e967, 0x1e968, 0x1e969, 0x1e96a, 0x1e96b, 0x1e96c, 0x1e96d, 0x1e96e, 0x1e96f, 0x1e970, 0x1e971, 0x1e972, 0x1e973, 0x1e974, 0x1e975, 0x1e976, 0x1e977, 0x1e978, 0x1e979, 0x1e97a, 0x1e97b, 0x1e97c,
0x1e97d, 0x1e97e, 0x1e97f, 0x1e980, 0x1e981, 0x1e982, 0x1e983, 0x1e984, 0x1e985, 0x1e986, 0x1e987, 0x1e988, 0x1e989, 0x1e98a, 0x1e98b, 0x1e98c, 0x1e98d, 0x1e98e, 0x1e98f, 0x1e990, 0x1e991, 0x1e992, 0x1e993, 0x1e994, 0x1e995,
0x1e996, 0x1e997, 0x1e998, 0x1e999, 0x1e99a, 0x1e99b, 0x1e99c, 0x1e99d, 0x1e99e, 0x1e99f, 0x1e9a0, 0x1e9a1, 0x1e9a2, 0x1e9a3, 0x1e9a4, 0x1e9a5, 0x1e9a6, 0x1e9a7, 0x1e9a8, 0x1e9a9, 0x1e9aa, 0x1e9ab, 0x1e9ac, 0x1e9ad, 0x1e9ae,
0x1e9af, 0x1e9b0, 0x1e9b1, 0x1e9b2, 0x1e9b3, 0x1e9b4, 0x1e9b5, 0x1e9b6, 0x1e9b7, 0x1e9b8, 0x1e9b9, 0x1e9ba, 0x1e9bb, 0x1e9bc, 0x1e9bd, 0x1e9be, 0x1e9bf, 0x1e9c0, 0x1e9c1, 0x1e9c2, 0x1e9c3, 0x1e9c4, 0x1e9c5, 0x1e9c6, 0x1e9c7,
0x1e9c8, 0x1e9c9, 0x1e9ca, 0x1e9cb, 0x1e9cc, 0x1e9cd, 0x1e9ce, 0x1e9cf, 0x1e9d0, 0x1e9d1, 0x1e9d2, 0x1e9d3, 0x1e9d4, 0x1e9d5, 0x1e9d6, 0x1e9d7, 0x1e9d8, 0x1e9d9, 0x1e9da, 0x1e9db, 0x1e9dc, 0x1e9dd, 0x1e9de, 0x1e9df, 0x1e9e0,
0x1e9e1, 0x1e9e2, 0x1e9e3, 0x1e9e4, 0x1e9e5, 0x1e9e6, 0x1e9e7, 0x1e9e8, 0x1e9e9, 0x1e9ea, 0x1e9eb, 0x1e9ec, 0x1e9ed, 0x1e9ee, 0x1e9ef, 0x1e9f0, 0x1e9f1, 0x1e9f2, 0x1e9f3, 0x1e9f4, 0x1e9f5, 0x1e9f6, 0x1e9f7,
} };
static const UnicodeCaseTableVector *caseTable[] = {
&caseTable00, &caseTable01, &caseTable02, &caseTable03, &caseTable04, &caseTable05, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &caseTable1e, &caseTable1f, nullptr, &caseTable21, nullptr, nullptr, &caseTable24, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &caseTableff, nullptr, nullptr, nullptr, nullptr, &caseTable104, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, &caseTable10c, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &caseTable118, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, &caseTable16e, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, &caseTable1e9,
};
static inline char getType(Unicode c)
{
int i;
char type;
if (c > 0xffff) {
type = 'X';
} else {
i = (c >> 8) & 0xff;
if ((type = typeTable[i].type) == 'X') {
type = typeTable[i].vector[c & 0xff];
}
}
return type;
}
bool unicodeTypeL(Unicode c)
{
return getType(c) == 'L';
}
bool unicodeTypeR(Unicode c)
{
return getType(c) == 'R';
}
bool unicodeTypeNum(Unicode c)
{
return getType(c) == '#';
}
bool unicodeTypeAlphaNum(Unicode c)
{
char t;
t = getType(c);
return t == 'L' || t == 'R' || t == '#';
}
#define UNICODE_ALPHABETIC_PRESENTATION_BLOCK_BEGIN 0xFB00
#define UNICODE_ALPHABETIC_PRESENTATION_BLOCK_END 0xFB4F
bool unicodeIsAlphabeticPresentationForm(Unicode c)
{
return c >= UNICODE_ALPHABETIC_PRESENTATION_BLOCK_BEGIN && c <= UNICODE_ALPHABETIC_PRESENTATION_BLOCK_END;
}
Unicode unicodeToUpper(Unicode c)
{
size_t i = (c >> 8);
if (i < sizeof(caseTable) / sizeof(caseTable[0]) && caseTable[i]) {
return caseTable[i]->codes[c & 0xff];
}
return c;
}
#define UNICODE_LAST_CHAR 0x10FFFF
#define UNICODE_MAX_TABLE_INDEX (UNICODE_LAST_CHAR / 256 + 1)
// large empty block between U+2FA1D and U+E0001
#define UNICODE_LAST_CHAR_PART1 0x2FAFF
#define UNICODE_LAST_PAGE_PART1 (UNICODE_LAST_CHAR_PART1 / 256)
#define UNICODE_PART2_START 0xE0000
#include "UnicodeCClassTables.h"
#include "UnicodeCompTables.h"
#include "UnicodeDecompTables.h"
#define CC_PART1(Page, Char) ((combining_class_table_part1[Page] >= UNICODE_MAX_TABLE_INDEX) ? (combining_class_table_part1[Page] - UNICODE_MAX_TABLE_INDEX) : (cclass_data[combining_class_table_part1[Page]][Char]))
#define CC_PART2(Page, Char) ((combining_class_table_part2[Page] >= UNICODE_MAX_TABLE_INDEX) ? (combining_class_table_part2[Page] - UNICODE_MAX_TABLE_INDEX) : (cclass_data[combining_class_table_part2[Page]][Char]))
#define COMBINING_CLASS(u) (((u) <= UNICODE_LAST_CHAR_PART1) ? CC_PART1((u) / 256, (u) % 256) : (((u) >= UNICODE_PART2_START && (u) <= UNICODE_LAST_CHAR) ? CC_PART2(((u)-UNICODE_PART2_START) / 256, (u) % 256) : 0))
// Write the compatibility decomposition of @u into @buf, returning the number
// of characters written. @buf may be NULL, in which case the length of the
// decomposition is returned but nothing is written. If @u is its own
// decomposition, write @u into @buf and return 1.
// If reverseRTL is true, then decompositions of RTL characters will be output
// in reverse order.
static int decomp_compat(Unicode u, Unicode *buf, bool reverseRTL = false)
{
// decomposition tables stored as lists {character, decomp_length, offset}
// so we do a binary search
int start = 0, end = DECOMP_TABLE_LENGTH;
if (u >= decomp_table[start].character && u <= decomp_table[end - 1].character) {
while (true) {
int midpoint = (start + end) / 2;
if (u == decomp_table[midpoint].character) {
int offset = decomp_table[midpoint].offset;
if (offset == -1) {
break;
} else {
int length = decomp_table[midpoint].length, i;
if (buf) {
for (i = 0; i < length; ++i) {
if (unicodeTypeR(u) && reverseRTL) {
buf[i] = decomp_expansion[offset + length - i - 1];
} else {
buf[i] = decomp_expansion[offset + i];
}
}
}
return length;
}
} else if (midpoint == start) {
break;
} else if (u > decomp_table[midpoint].character) {
start = midpoint;
} else {
end = midpoint;
}
}
}
if (buf) {
*buf = u;
}
return 1;
}
#define CI(Page, Char) ((compose_table[Page] >= UNICODE_MAX_TABLE_INDEX) ? (compose_table[Page] - UNICODE_MAX_TABLE_INDEX) : (compose_data[compose_table[Page]][Char]))
#define COMPOSE_INDEX(u) ((((u) / 256) > (COMPOSE_TABLE_LAST)) ? 0 : CI((u) / 256, (u) % 256))
// If @add combines with @base, write the combination to @out and return
// true. Otherwise return false.
static bool combine(Unicode base, Unicode add, Unicode *out)
{
unsigned short idx_base, idx_add;
idx_base = COMPOSE_INDEX(base);
if (idx_base >= COMPOSE_FIRST_SINGLE_START && idx_base < COMPOSE_SECOND_START) {
if (compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][0] == add) {
*out = compose_first_single[idx_base - COMPOSE_FIRST_SINGLE_START][1];
return true;
} else {
return false;
}
}
idx_add = COMPOSE_INDEX(add);
if (idx_add >= COMPOSE_SECOND_SINGLE_START) {
if (compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][0] == base) {
*out = compose_second_single[idx_add - COMPOSE_SECOND_SINGLE_START][1];
return true;
} else {
return false;
}
}
if (idx_base >= COMPOSE_FIRST_START && idx_base < COMPOSE_FIRST_SINGLE_START && idx_add >= COMPOSE_SECOND_START && idx_add < COMPOSE_SECOND_SINGLE_START) {
Unicode o = compose_array[idx_base - COMPOSE_FIRST_START][idx_add - COMPOSE_SECOND_START];
if (o) {
*out = o;
return true;
}
}
return false;
}
#define HANGUL_S_BASE 0xAC00
#define HANGUL_L_BASE 0x1100
#define HANGUL_V_BASE 0x1161
#define HANGUL_T_BASE 0x11A7
#define HANGUL_L_COUNT 19
#define HANGUL_V_COUNT 21
#define HANGUL_T_COUNT 28
#define HANGUL_S_COUNT (HANGUL_L_COUNT * HANGUL_V_COUNT * HANGUL_T_COUNT)
#define HANGUL_N_COUNT (HANGUL_V_COUNT * HANGUL_T_COUNT)
#define HANGUL_IS_L(u) (((u) >= HANGUL_L_BASE) && ((u) < HANGUL_L_BASE + HANGUL_L_COUNT))
#define HANGUL_IS_V(u) (((u) >= HANGUL_V_BASE) && ((u) < HANGUL_V_BASE + HANGUL_V_COUNT))
#define HANGUL_IS_T(u) (((u) >= HANGUL_T_BASE) && ((u) < HANGUL_T_BASE + HANGUL_T_COUNT))
#define HANGUL_IS_SYLLABLE(u) (((u) >= HANGUL_S_BASE) && ((u) < HANGUL_S_BASE + HANGUL_S_COUNT))
#define HANGUL_SYLLABLE_IS_LV(u) (((u)-HANGUL_S_BASE) % HANGUL_T_COUNT == 0)
#define IS_HANGUL(u) (HANGUL_IS_L(u) || HANGUL_IS_V(u) || HANGUL_IS_T(u) || HANGUL_IS_SYLLABLE(u))
#define HANGUL_COMPOSE_L_V(l, v) (HANGUL_S_BASE + (HANGUL_T_COUNT * (((v)-HANGUL_V_BASE) + (HANGUL_V_COUNT * ((l)-HANGUL_L_BASE)))))
#define HANGUL_COMPOSE_LV_T(lv, t) ((lv) + ((t)-HANGUL_T_BASE))
// Converts Unicode string @in of length @len to its normalization in form
// NFKC (compatibility decomposition + canonical composition). The length of
// the resulting Unicode string is returned in @out_len. If non-NULL, @indices
// is assigned the location of a newly-allocated array of length @out_len + 1,
// for each character in the normalized string giving the index in @in of the
// corresponding unnormalized character. @indices is not guaranteed monotone or
// onto.
Unicode *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices)
{
return unicodeNormalizeNFKC(in, len, out_len, indices, false);
}
Unicode *unicodeNormalizeNFKC(const Unicode *in, int len, int *out_len, int **indices, bool reverseRTL)
{
Unicode *out;
int i, o, *classes, *idx = nullptr;
for (i = 0, o = 0; i < len; ++i) {
if (HANGUL_IS_L(in[i]) || HANGUL_IS_SYLLABLE(in[i])) {
o += 1;
} else {
o += decomp_compat(in[i], nullptr);
}
}
out = (Unicode *)gmallocn(o, sizeof(Unicode));
classes = (int *)gmallocn(o, sizeof(int));
if (indices) {
idx = (int *)gmallocn(o + 1, sizeof(int));
}
for (i = 0, o = 0; i < len;) {
Unicode u = in[i];
if (IS_HANGUL(u)) {
if (HANGUL_IS_L(u)) {
Unicode l = u;
if (i + 1 < len && HANGUL_IS_V(in[i + 1])) {
Unicode lv = HANGUL_COMPOSE_L_V(l, in[++i]);
if (i + 1 < len && HANGUL_IS_T(in[i + 1])) {
out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]);
} else {
out[o] = lv;
}
} else {
out[o] = l;
}
} else if (HANGUL_SYLLABLE_IS_LV(u)) {
Unicode lv = u;
if (i + 1 < len && HANGUL_IS_T(in[i + 1])) {
out[o] = HANGUL_COMPOSE_LV_T(lv, in[++i]);
} else {
out[o] = lv;
}
} else {
out[o] = u;
}
if (indices) {
idx[o] = i;
}
++i;
++o;
} else {
int j, p, q, r, s, dlen;
// write compatibility decompositions into out (we have enough space)
// chomp in until a starter is reached
for (j = i, p = o; j < len; ++j) {
u = in[j];
if (j != i && COMBINING_CLASS(u) == 0) {
break;
}
dlen = decomp_compat(u, out + p, reverseRTL);
for (q = p; q < p + dlen; ++q) {
classes[q] = COMBINING_CLASS(out[q]);
if (indices) {
idx[q] = j;
}
}
p += dlen;
}
// put out[o, p) in canonical ordering
for (q = o + 1; q < p; ++q) {
for (r = q; r > o + 1; --r) { // FIXME worth using a better sort?
int swap;
if (classes[r] >= classes[r - 1]) {
break;
}
u = out[r];
out[r] = out[r - 1];
out[r - 1] = u;
swap = classes[r];
classes[r] = classes[r - 1];
classes[r - 1] = swap;
if (indices) {
swap = idx[r];
idx[r] = idx[r - 1];
idx[r - 1] = swap;
}
}
}
// canonical compose out[o, p)
for (q = o + 1; q < p; ++q) {
if (!combine(out[o], out[q], &out[o])) {
break;
}
}
// move out[q, p) back to [o+1, ?)
if (q != o + 1) {
for (r = q, s = o + 1; r < p; ++r, ++s) {
out[s] = out[r];
if (indices) {
idx[s] = idx[r];
}
}
} else {
s = p;
}
i = j;
o = s;
}
}
*out_len = o;
gfree(classes);
if (indices) {
idx[o] = len;
*indices = idx;
}
return out;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View file

@ -0,0 +1,61 @@
/*
* Copyright (C) 2009-2011, Pino Toscano <pino@kde.org>
* Copyright (C) 2018, 2020, 2022, Albert Astals Cid <aacid@kde.org>
* Copyright (C) 2018, 2020, Adam Reichold <adam.reichold@t-online.de>
*
* 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef POPPLER_DOCUMENT_PRIVATE_H
#define POPPLER_DOCUMENT_PRIVATE_H
#include "poppler-global.h"
#include "poppler-config.h"
#include "GooString.h"
#include "PDFDoc.h"
#include "GlobalParams.h"
#include <vector>
namespace poppler {
class document;
class embedded_file;
class document_private : private GlobalParamsIniter
{
public:
document_private(std::unique_ptr<GooString> &&file_path, const std::string &owner_password, const std::string &user_password);
document_private(byte_array *file_data, const std::string &owner_password, const std::string &user_password);
document_private(const char *file_data, int file_data_length, const std::string &owner_password, const std::string &user_password);
~document_private();
static document *check_document(document_private *doc, byte_array *file_data);
PDFDoc *doc;
byte_array doc_data;
const char *raw_doc_data;
int raw_doc_data_length;
bool is_locked;
std::vector<embedded_file *> embedded_files;
private:
document_private();
};
}
#endif

View file

@ -0,0 +1,16 @@
<theme>
<view name="system, gamelist">
<image name="band1">
<color>FDC20F</color>
</image>
<image name="band2">
<color>8461A9</color>
</image>
<image name="band3">
<color>CA1A15</color>
</image>
<image name="band4">
<color>111111</color>
</image>
</view>
</theme>

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -0,0 +1,52 @@
/* poppler-converter-private.h: Qt interface to poppler
* Copyright (C) 2007, 2009, 2018, Albert Astals Cid <aacid@kde.org>
* Copyright (C) 2008, Pino Toscano <pino@kde.org>
*
* 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, 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., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef POPPLER_QT6_CONVERTER_PRIVATE_H
#define POPPLER_QT6_CONVERTER_PRIVATE_H
#include <QtCore/QString>
class QIODevice;
namespace Poppler {
class DocumentData;
class BaseConverterPrivate
{
public:
BaseConverterPrivate();
virtual ~BaseConverterPrivate();
BaseConverterPrivate(const BaseConverterPrivate &) = delete;
BaseConverterPrivate &operator=(const BaseConverterPrivate &) = delete;
QIODevice *openDevice();
void closeDevice();
DocumentData *document;
QString outputFileName;
QIODevice *iodev;
bool ownIodev : 1;
BaseConverter::Error lastError;
};
}
#endif

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 67 KiB

View file

@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_2" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="566.926px" height="179.318px" viewBox="0 0 566.926 179.318" enable-background="new 0 0 566.926 179.318"
xml:space="preserve">
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="478.7065" y1="416.1619" x2="478.7065" y2="513.9246" gradientTransform="matrix(1 0 0 1 -0.0898 -416.1621)">
<stop offset="0" style="stop-color:#33438A"/>
<stop offset="1" style="stop-color:#0098DF"/>
</linearGradient>
<polygon fill="url(#SVGID_1_)" points="559.93,6.986 559.93,45.387 390.307,45.387 390.307,97.762 566.926,97.762 566.926,90.777
397.297,90.777 397.297,52.375 566.926,52.375 566.926,0 390.307,0 390.307,6.986 "/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="270.4648" y1="416.1619" x2="270.4648" y2="513.9246" gradientTransform="matrix(1 0 0 1 -0.0898 -416.1621)">
<stop offset="0" style="stop-color:#33438A"/>
<stop offset="1" style="stop-color:#0098DF"/>
</linearGradient>
<polygon fill="url(#SVGID_2_)" points="364.131,0 364.131,6.986 274.038,6.986 274.038,97.762 176.62,97.762 176.62,90.777
266.713,90.777 266.713,0 "/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="88.3994" y1="416.1619" x2="88.3994" y2="513.9246" gradientTransform="matrix(1 0 0 1 -0.0898 -416.1621)">
<stop offset="0" style="stop-color:#33438A"/>
<stop offset="1" style="stop-color:#0098DF"/>
</linearGradient>
<polygon fill="url(#SVGID_3_)" points="6.986,97.762 6.986,52.375 176.62,52.375 176.62,0 0,0 0,6.873 169.639,6.986
169.639,45.387 0,45.387 0,97.762 "/>
<path id="path788" fill="#1F1A17" d="M143.989,131.765v34.387h5.37v-31.087h4.972c0,0,3.604-0.015,4.842,1.604
c1.046,1.375,1.238,3.858,1.238,5.541c0,1.803-0.11,4.575-0.717,5.594c-0.915,1.551-2.41,1.859-3.791,1.859h-3.28v3.048h4.712
c0,0,4.255,0.188,6.09-1.676c2.243-2.29,2.81-5.348,2.81-9.446c0-3.736-1.35-7.494-4.116-8.763
c-2.288-1.063-6.414-1.063-6.414-1.063L143.989,131.765L143.989,131.765z"/>
<polygon id="polygon790" fill="#1F1A17" points="170.451,166.152 175.831,166.152 175.831,131.765 170.451,131.765 "/>
<polygon id="polygon792" fill="#1F1A17" points="204.365,139.775 214.186,165.518 208.55,179.318 213.005,179.318 229.233,139.775
224.262,139.775 217.191,159.049 210.608,139.775 "/>
<path id="path794" fill="#1F1A17" d="M233.277,165.93v-3.242c0,0,5.674,0.221,6.853,0.221c2.623,0,3.927-0.563,4.909-1.609
c0.583-0.627,1.111-3.439,1.111-4.433c0-1.008-0.187-3.164-0.579-4.039c-0.404-0.868-1.316-1.675-2.692-1.786
c-0.973-0.09-2.494-0.277-4.253-0.364c-2.478-0.113-4.115-1.414-4.91-2.336c-0.776-0.938-1.827-2.321-1.827-6.629
c0-4.286,1.11-6.683,2.219-7.805c1.118-1.121,2.753-1.612,3.999-1.829c1.432-0.254,3.791-0.271,3.791-0.271l7.516,0.225v3.245
c0,0-5.484-0.211-6.661-0.211c-2.623,0-3.408,0.552-4.39,1.604c-0.574,0.634-1.027,2.363-1.027,3.368c0,0.988,0.117,3,0.506,3.868
c0.392,0.875,1.312,1.676,2.679,1.799c0.975,0.073,2.495,0.271,4.256,0.357c2.49,0.124,4.124,1.407,4.908,2.344
c0.784,0.935,1.836,2.898,1.836,7.187s-1.118,7.354-2.229,8.458c-1.11,1.133-2.74,1.626-3.99,1.841
c-1.44,0.261-3.798,0.261-3.798,0.261L233.277,165.93L233.277,165.93z"/>
<path id="path796" fill="#1F1A17" d="M262.552,135.065h-5.361v25.23c0,0,0.129,2.3,0.257,3.104c0.135,0.813,1.315,2.75,4.388,2.75
l5.561-0.12v-3.237c0,0-1.514,0.113-2.418,0.113c-0.921,0-2.041-0.067-2.229-1.629c-0.199-1.543-0.199-3.408-0.199-3.408v-14.857
h6.056v-3.236h-6.056L262.552,135.065L262.552,135.065z"/>
<polygon id="polygon798" fill="#1F1A17" points="314.328,166.152 319.696,166.152 319.696,139.775 314.328,139.775 "/>
<polygon id="polygon800" fill="#1F1A17" points="314.328,136.551 319.696,136.551 319.696,131.765 314.328,131.765 "/>
<path id="path802" fill="#1F1A17" d="M336.653,139.557c3.65,0,6.482,0.821,8.005,2.052c1.535,1.236,3.418,3.829,3.418,11.353
c0,7.524-1.883,10.114-3.418,11.363c-1.522,1.229-4.354,2.049-8.005,2.049c-3.658,0-6.482-0.82-8.01-2.049
c-1.527-1.249-3.414-3.839-3.414-11.363c0-7.521,1.887-10.114,3.414-11.353C330.17,140.38,332.995,139.557,336.653,139.557z
M332.981,144.615c-0.741,0.905-1.637,2.824-1.637,8.346c0,5.538,0.896,7.44,1.637,8.345c0.729,0.901,2.083,1.515,3.838,1.515
c1.764,0,3.111-0.611,3.859-1.515c0.733-0.902,1.636-2.807,1.636-8.345c0-5.521-0.901-7.438-1.636-8.346
c-0.748-0.901-2.097-1.501-3.859-1.501C335.064,143.114,333.709,143.714,332.981,144.615z"/>
<path id="path804" fill="#1F1A17" d="M359.197,143.49l5.255-0.225c1.385,0,2.997,0.373,3.778,1.361
c0.737,0.941,1.198,2.056,1.198,3.858v17.626h5.371v-18.065c0-3.419-1.049-5.396-2.627-6.644c-2.254-1.789-6.279-1.629-6.279-1.629
l-12.03,0.229v26.106h5.334V143.49L359.197,143.49z"/>
<path id="path806" fill="#1F1A17" d="M303.66,135.065h-5.374v25.23c0,0,0.127,2.3,0.26,3.104c0.131,0.813,1.303,2.75,4.381,2.75
l5.566-0.12v-3.237c0,0-1.509,0.113-2.424,0.113c-0.907,0-2.029-0.067-2.223-1.629c-0.188-1.543-0.188-3.408-0.188-3.408v-14.857
h6.042v-3.236h-6.041V135.065L303.66,135.065z"/>
<path id="path808" fill="#1F1A17" d="M196.182,148.487c0-1.803-0.46-2.917-1.194-3.858c-0.787-0.988-2.407-1.359-3.784-1.359
l-7.079,0.223v-3.486l8.522-0.229c0,0,4.03-0.16,6.284,1.629c1.565,1.245,2.621,3.225,2.621,6.644v17.813l-10.288,0.221
c0,0-4.662,0.023-7.001-0.935c-2.29-0.93-3.537-3.485-3.537-7.021c0-3.415,1.052-5.411,2.622-6.659
c2.255-1.783,6.275-1.61,6.275-1.61h3.288v3.048h-1.844c-1.375,0-2.795,0.253-3.577,1.236c-0.744,0.944-1.136,1.749-1.136,3.55
c0,2.362,0.46,3.422,1.572,4.227c0.981,0.714,2.741,0.87,4.71,0.87l3.546-0.22V148.487L196.182,148.487z"/>
<path id="path810" fill="#1F1A17" d="M286.663,148.487c0-1.803-0.453-2.917-1.188-3.858c-0.793-0.988-2.409-1.359-3.782-1.359
l-7.072,0.223v-3.486l8.505-0.229c0,0,4.032-0.16,6.285,1.629c1.571,1.245,2.614,3.225,2.614,6.644v17.813l-10.272,0.221
c0,0-4.664,0.023-7.013-0.935c-2.28-0.93-3.534-3.485-3.534-7.021c0-3.415,1.058-5.411,2.619-6.659
c2.257-1.783,6.288-1.61,6.288-1.61h3.278v3.048h-1.843c-1.367,0-2.801,0.253-3.58,1.236c-0.734,0.944-1.135,1.749-1.135,3.55
c0,2.362,0.471,3.422,1.572,4.227c0.981,0.714,2.749,0.87,4.713,0.87l3.545-0.22V148.487L286.663,148.487z"/>
<path id="path816" fill="#1F1A17" d="M422.934,136.211c0.068,3.962-0.125,6.048-1.457,8.031c-1.174,1.742-3.498,3.331-8.635,3.331
l-6.373-0.189c-1.008,0.019-3.607,0.313-4.84,1.632c-1.055,1.14-1.138,1.993-1.244,5.026v8.896h21.66v4.357h-23.678l-1.138-0.007
c-1.609,0-3.191-1.092-3.191-3.277v-6.636c0.113-7.752,0.667-8.863,2.351-10.897c1.168-1.405,3.912-2.979,7.24-3.146
c0.656-0.029,1.885-0.113,3.614-0.066c1.259,0.056,2.519,0.092,3.071,0.102c2.951,0.03,4.025-0.514,4.833-1.571
c0.921-1.188,1.416-2.595,1.416-4.896c0-2.156-0.44-4.188-1.263-5.131c-0.994-1.093-1.948-1.822-4.717-1.822
c-7.007-0.019-15.182,0.167-15.182,0.167v-4.116c0,0,7.99-0.34,16.139-0.46c5.074-0.087,7.872,1.262,9.295,3.118
C422.338,130.589,422.867,132.418,422.934,136.211L422.934,136.211z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7 KiB

View file

@ -0,0 +1,371 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_git_types_h__
#define INCLUDE_git_types_h__
#include "common.h"
/**
* @file git2/types.h
* @brief libgit2 base & compatibility types
* @ingroup Git
* @{
*/
GIT_BEGIN_DECL
/**
* Cross-platform compatibility types for off_t / time_t
*
* NOTE: This needs to be in a public header so that both the library
* implementation and client applications both agree on the same types.
* Otherwise we get undefined behavior.
*
* Use the "best" types that each platform provides. Currently we truncate
* these intermediate representations for compatibility with the git ABI, but
* if and when it changes to support 64 bit types, our code will naturally
* adapt.
* NOTE: These types should match those that are returned by our internal
* stat() functions, for all platforms.
*/
#include <sys/types.h>
#ifdef __amigaos4__
#include <stdint.h>
#endif
#if defined(_MSC_VER)
typedef __int64 git_off_t;
typedef __time64_t git_time_t;
#elif defined(__MINGW32__)
typedef off64_t git_off_t;
typedef __time64_t git_time_t;
#elif defined(__HAIKU__)
typedef __haiku_std_int64 git_off_t;
typedef __haiku_std_int64 git_time_t;
#else /* POSIX */
/*
* Note: Can't use off_t since if a client program includes <sys/types.h>
* before us (directly or indirectly), they'll get 32 bit off_t in their client
* app, even though /we/ define _FILE_OFFSET_BITS=64.
*/
typedef int64_t git_off_t;
typedef int64_t git_time_t; /**< time in seconds from epoch */
#endif
/** The maximum size of an object */
typedef uint64_t git_object_size_t;
#include "buffer.h"
#include "oid.h"
/** Basic type (loose or packed) of any Git object. */
typedef enum {
GIT_OBJECT_ANY = -2, /**< Object can be any of the following */
GIT_OBJECT_INVALID = -1, /**< Object is invalid. */
GIT_OBJECT_COMMIT = 1, /**< A commit object. */
GIT_OBJECT_TREE = 2, /**< A tree (directory listing) object. */
GIT_OBJECT_BLOB = 3, /**< A file revision object. */
GIT_OBJECT_TAG = 4, /**< An annotated tag object. */
GIT_OBJECT_OFS_DELTA = 6, /**< A delta, base is given by an offset. */
GIT_OBJECT_REF_DELTA = 7 /**< A delta, base is given by object id. */
} git_object_t;
/** An open object database handle. */
typedef struct git_odb git_odb;
/** A custom backend in an ODB */
typedef struct git_odb_backend git_odb_backend;
/** An object read from the ODB */
typedef struct git_odb_object git_odb_object;
/** A stream to read/write from the ODB */
typedef struct git_odb_stream git_odb_stream;
/** A stream to write a packfile to the ODB */
typedef struct git_odb_writepack git_odb_writepack;
/** a writer for multi-pack-index files. */
typedef struct git_midx_writer git_midx_writer;
/** An open refs database handle. */
typedef struct git_refdb git_refdb;
/** A custom backend for refs */
typedef struct git_refdb_backend git_refdb_backend;
/** A git commit-graph */
typedef struct git_commit_graph git_commit_graph;
/** a writer for commit-graph files. */
typedef struct git_commit_graph_writer git_commit_graph_writer;
/**
* Representation of an existing git repository,
* including all its object contents
*/
typedef struct git_repository git_repository;
/** Representation of a working tree */
typedef struct git_worktree git_worktree;
/** Representation of a generic object in a repository */
typedef struct git_object git_object;
/** Representation of an in-progress walk through the commits in a repo */
typedef struct git_revwalk git_revwalk;
/** Parsed representation of a tag object. */
typedef struct git_tag git_tag;
/** In-memory representation of a blob object. */
typedef struct git_blob git_blob;
/** Parsed representation of a commit object. */
typedef struct git_commit git_commit;
/** Representation of each one of the entries in a tree object. */
typedef struct git_tree_entry git_tree_entry;
/** Representation of a tree object. */
typedef struct git_tree git_tree;
/** Constructor for in-memory trees */
typedef struct git_treebuilder git_treebuilder;
/** Memory representation of an index file. */
typedef struct git_index git_index;
/** An iterator for entries in the index. */
typedef struct git_index_iterator git_index_iterator;
/** An iterator for conflicts in the index. */
typedef struct git_index_conflict_iterator git_index_conflict_iterator;
/** Memory representation of a set of config files */
typedef struct git_config git_config;
/** Interface to access a configuration file */
typedef struct git_config_backend git_config_backend;
/** Representation of a reference log entry */
typedef struct git_reflog_entry git_reflog_entry;
/** Representation of a reference log */
typedef struct git_reflog git_reflog;
/** Representation of a git note */
typedef struct git_note git_note;
/** Representation of a git packbuilder */
typedef struct git_packbuilder git_packbuilder;
/** Time in a signature */
typedef struct git_time {
git_time_t time; /**< time in seconds from epoch */
int offset; /**< timezone offset, in minutes */
char sign; /**< indicator for questionable '-0000' offsets in signature */
} git_time;
/** An action signature (e.g. for committers, taggers, etc) */
typedef struct git_signature {
char *name; /**< full name of the author */
char *email; /**< email of the author */
git_time when; /**< time when the action happened */
} git_signature;
/** In-memory representation of a reference. */
typedef struct git_reference git_reference;
/** Iterator for references */
typedef struct git_reference_iterator git_reference_iterator;
/** Transactional interface to references */
typedef struct git_transaction git_transaction;
/** Annotated commits, the input to merge and rebase. */
typedef struct git_annotated_commit git_annotated_commit;
/** Representation of a status collection */
typedef struct git_status_list git_status_list;
/** Representation of a rebase */
typedef struct git_rebase git_rebase;
/** Basic type of any Git reference. */
typedef enum {
GIT_REFERENCE_INVALID = 0, /**< Invalid reference */
GIT_REFERENCE_DIRECT = 1, /**< A reference that points at an object id */
GIT_REFERENCE_SYMBOLIC = 2, /**< A reference that points at another reference */
GIT_REFERENCE_ALL = GIT_REFERENCE_DIRECT | GIT_REFERENCE_SYMBOLIC
} git_reference_t;
/** Basic type of any Git branch. */
typedef enum {
GIT_BRANCH_LOCAL = 1,
GIT_BRANCH_REMOTE = 2,
GIT_BRANCH_ALL = GIT_BRANCH_LOCAL|GIT_BRANCH_REMOTE
} git_branch_t;
/** Valid modes for index and tree entries. */
typedef enum {
GIT_FILEMODE_UNREADABLE = 0000000,
GIT_FILEMODE_TREE = 0040000,
GIT_FILEMODE_BLOB = 0100644,
GIT_FILEMODE_BLOB_EXECUTABLE = 0100755,
GIT_FILEMODE_LINK = 0120000,
GIT_FILEMODE_COMMIT = 0160000
} git_filemode_t;
/**
* A refspec specifies the mapping between remote and local reference
* names when fetch or pushing.
*/
typedef struct git_refspec git_refspec;
/**
* Git's idea of a remote repository. A remote can be anonymous (in
* which case it does not have backing configuration entries).
*/
typedef struct git_remote git_remote;
/**
* Interface which represents a transport to communicate with a
* remote.
*/
typedef struct git_transport git_transport;
/**
* Preparation for a push operation. Can be used to configure what to
* push and the level of parallelism of the packfile builder.
*/
typedef struct git_push git_push;
/* documentation in the definition */
typedef struct git_remote_head git_remote_head;
typedef struct git_remote_callbacks git_remote_callbacks;
/**
* Parent type for `git_cert_hostkey` and `git_cert_x509`.
*/
typedef struct git_cert git_cert;
/**
* Opaque structure representing a submodule.
*/
typedef struct git_submodule git_submodule;
/**
* Submodule update values
*
* These values represent settings for the `submodule.$name.update`
* configuration value which says how to handle `git submodule update` for
* this submodule. The value is usually set in the ".gitmodules" file and
* copied to ".git/config" when the submodule is initialized.
*
* You can override this setting on a per-submodule basis with
* `git_submodule_set_update()` and write the changed value to disk using
* `git_submodule_save()`. If you have overwritten the value, you can
* revert it by passing `GIT_SUBMODULE_UPDATE_RESET` to the set function.
*
* The values are:
*
* - GIT_SUBMODULE_UPDATE_CHECKOUT: the default; when a submodule is
* updated, checkout the new detached HEAD to the submodule directory.
* - GIT_SUBMODULE_UPDATE_REBASE: update by rebasing the current checked
* out branch onto the commit from the superproject.
* - GIT_SUBMODULE_UPDATE_MERGE: update by merging the commit in the
* superproject into the current checkout out branch of the submodule.
* - GIT_SUBMODULE_UPDATE_NONE: do not update this submodule even when
* the commit in the superproject is updated.
* - GIT_SUBMODULE_UPDATE_DEFAULT: not used except as static initializer
* when we don't want any particular update rule to be specified.
*/
typedef enum {
GIT_SUBMODULE_UPDATE_CHECKOUT = 1,
GIT_SUBMODULE_UPDATE_REBASE = 2,
GIT_SUBMODULE_UPDATE_MERGE = 3,
GIT_SUBMODULE_UPDATE_NONE = 4,
GIT_SUBMODULE_UPDATE_DEFAULT = 0
} git_submodule_update_t;
/**
* Submodule ignore values
*
* These values represent settings for the `submodule.$name.ignore`
* configuration value which says how deeply to look at the working
* directory when getting submodule status.
*
* You can override this value in memory on a per-submodule basis with
* `git_submodule_set_ignore()` and can write the changed value to disk
* with `git_submodule_save()`. If you have overwritten the value, you
* can revert to the on disk value by using `GIT_SUBMODULE_IGNORE_RESET`.
*
* The values are:
*
* - GIT_SUBMODULE_IGNORE_UNSPECIFIED: use the submodule's configuration
* - GIT_SUBMODULE_IGNORE_NONE: don't ignore any change - i.e. even an
* untracked file, will mark the submodule as dirty. Ignored files are
* still ignored, of course.
* - GIT_SUBMODULE_IGNORE_UNTRACKED: ignore untracked files; only changes
* to tracked files, or the index or the HEAD commit will matter.
* - GIT_SUBMODULE_IGNORE_DIRTY: ignore changes in the working directory,
* only considering changes if the HEAD of submodule has moved from the
* value in the superproject.
* - GIT_SUBMODULE_IGNORE_ALL: never check if the submodule is dirty
* - GIT_SUBMODULE_IGNORE_DEFAULT: not used except as static initializer
* when we don't want any particular ignore rule to be specified.
*/
typedef enum {
GIT_SUBMODULE_IGNORE_UNSPECIFIED = -1, /**< use the submodule's configuration */
GIT_SUBMODULE_IGNORE_NONE = 1, /**< any change or untracked == dirty */
GIT_SUBMODULE_IGNORE_UNTRACKED = 2, /**< dirty if tracked files change */
GIT_SUBMODULE_IGNORE_DIRTY = 3, /**< only dirty if HEAD moved */
GIT_SUBMODULE_IGNORE_ALL = 4 /**< never dirty */
} git_submodule_ignore_t;
/**
* Options for submodule recurse.
*
* Represent the value of `submodule.$name.fetchRecurseSubmodules`
*
* * GIT_SUBMODULE_RECURSE_NO - do no recurse into submodules
* * GIT_SUBMODULE_RECURSE_YES - recurse into submodules
* * GIT_SUBMODULE_RECURSE_ONDEMAND - recurse into submodules only when
* commit not already in local clone
*/
typedef enum {
GIT_SUBMODULE_RECURSE_NO = 0,
GIT_SUBMODULE_RECURSE_YES = 1,
GIT_SUBMODULE_RECURSE_ONDEMAND = 2
} git_submodule_recurse_t;
typedef struct git_writestream git_writestream;
/** A type to write in a streaming fashion, for example, for filters. */
struct git_writestream {
int GIT_CALLBACK(write)(git_writestream *stream, const char *buffer, size_t len);
int GIT_CALLBACK(close)(git_writestream *stream);
void GIT_CALLBACK(free)(git_writestream *stream);
};
/** Representation of .mailmap file state. */
typedef struct git_mailmap git_mailmap;
/** @} */
GIT_END_DECL
#endif

View file

@ -0,0 +1,34 @@
<theme>
<view name="system">
<text name="info1">
<text>Manufacturer: Nintendo</text>
</text>
<text name="info2">
<text>Released: 1995</text>
</text>
<text name="info3">
<text>Units sold: 770,000</text>
</text>
<text name="info4">
<text>Best-selling game: VB Wario Land</text>
</text>
<text name="info5">
<text>CPU: 32-bit NEC V810 @ 20 MHz</text>
</text>
<text name="info6">
<text>RAM: 1 MB DRAM + 512 KB P-SRAM</text>
</text>
<text name="info7">
<text>Screen: 2 RTI light-emitting LEDs</text>
</text>
<text name="info8">
<text>Colors: 4 colors / 32 intensity levels</text>
</text>
<text name="info9">
<text>Resolution: 384×224 pixels</text>
</text>
<text name="info10">
<text>Sound: 16-bit stereo</text>
</text>
</view>
</theme>

View file

@ -0,0 +1,57 @@
/*
* Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#ifndef INCLUDE_unix_pthread_h__
#define INCLUDE_unix_pthread_h__
typedef struct {
pthread_t thread;
} git_thread;
GIT_INLINE(int) git_threads_global_init(void) { return 0; }
#define git_thread_create(git_thread_ptr, start_routine, arg) \
pthread_create(&(git_thread_ptr)->thread, NULL, start_routine, arg)
#define git_thread_join(git_thread_ptr, status) \
pthread_join((git_thread_ptr)->thread, status)
#define git_thread_currentid() ((size_t)(pthread_self()))
#define git_thread_exit(retval) pthread_exit(retval)
/* Git Mutex */
#define git_mutex pthread_mutex_t
#define git_mutex_init(a) pthread_mutex_init(a, NULL)
#define git_mutex_lock(a) pthread_mutex_lock(a)
#define git_mutex_unlock(a) pthread_mutex_unlock(a)
#define git_mutex_free(a) pthread_mutex_destroy(a)
/* Git condition vars */
#define git_cond pthread_cond_t
#define git_cond_init(c) pthread_cond_init(c, NULL)
#define git_cond_free(c) pthread_cond_destroy(c)
#define git_cond_wait(c, l) pthread_cond_wait(c, l)
#define git_cond_signal(c) pthread_cond_signal(c)
#define git_cond_broadcast(c) pthread_cond_broadcast(c)
/* Pthread (-ish) rwlock
*
* This differs from normal pthreads rwlocks in two ways:
* 1. Separate APIs for releasing read locks and write locks (as
* opposed to the pure POSIX API which only has one unlock fn)
* 2. You should not use recursive read locks (i.e. grabbing a read
* lock in a thread that already holds a read lock) because the
* Windows implementation doesn't support it
*/
#define git_rwlock pthread_rwlock_t
#define git_rwlock_init(a) pthread_rwlock_init(a, NULL)
#define git_rwlock_rdlock(a) pthread_rwlock_rdlock(a)
#define git_rwlock_rdunlock(a) pthread_rwlock_unlock(a)
#define git_rwlock_wrlock(a) pthread_rwlock_wrlock(a)
#define git_rwlock_wrunlock(a) pthread_rwlock_unlock(a)
#define git_rwlock_free(a) pthread_rwlock_destroy(a)
#define GIT_RWLOCK_STATIC_INIT PTHREAD_RWLOCK_INITIALIZER
#endif

View file

@ -0,0 +1,16 @@
<theme>
<view name="system, gamelist">
<image name="band1">
<color>DCE3E6</color>
</image>
<image name="band2">
<color>884A52</color>
</image>
<image name="band3">
<color>D4AA6F</color>
</image>
<image name="band4">
<color>212122</color>
</image>
</view>
</theme>

View file

@ -0,0 +1,22 @@
<theme>
<view name="system">
<text name="info1">
<text>Manufacturer: Funtech</text>
</text>
<text name="info2">
<text>Released: 1995</text>
</text>
<text name="info3">
<text>CPU: Motorola 68000 @ 10.74 MHz</text>
</text>
<text name="info4">
<text>RAM: 256 KB / VRAM: 128 KB</text>
</text>
<text name="info5">
<text>Graphics: UMC UM6618</text>
</text>
<text name="info6">
<text>Resolution: 320×240 pixels, 256 colors (32,768 color palette)</text>
</text>
</view>
</theme>

Some files were not shown because too many files have changed in this diff Show more