Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
quote.cpp
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
/*
5 * Authors:
6 * see git history
7 * Krzysztof KosiƄski <tweenk.pl@gmail.com>
8 *
9 * Copyright (C) 2015 Authors
10 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
11 */
12
13#include "xml/quote.h"
14#include <cstring>
15#include <glib.h>
16
18size_t xml_quoted_strlen(char const *val)
19{
20 if (!val) return 0;
21 size_t len = 0;
22
23 for (char const *valp = val; *valp; ++valp) {
24 switch (*valp) {
25 case '"':
26 len += 6; // &quot;
27 break;
28 case '&':
29 len += 5; // &amp;
30 break;
31 case '<':
32 case '>':
33 len += 4; // &lt; or &gt;
34 break;
35 default:
36 ++len;
37 break;
38 }
39 }
40 return len;
41}
42
43char *xml_quote_strdup(char const *src)
44{
45 size_t len = xml_quoted_strlen(src);
46 char *result = static_cast<char*>(g_malloc(len + 1));
47 char *resp = result;
48
49 for (char const *srcp = src; *srcp; ++srcp) {
50 switch(*srcp) {
51 case '"':
52 strcpy(resp, "&quot;");
53 resp += 6;
54 break;
55 case '&':
56 strcpy(resp, "&amp;");
57 resp += 5;
58 break;
59 case '<':
60 strcpy(resp, "&lt;");
61 resp += 4;
62 break;
63 case '>':
64 strcpy(resp, "&gt;");
65 resp += 4;
66 break;
67 default:
68 *resp++ = *srcp;
69 break;
70 }
71 }
72 *resp = 0;
73 return result;
74}
75
76// quote: ", &, <, >
77
78
79/*
80 Local Variables:
81 mode:c++
82 c-file-style:"stroustrup"
83 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
84 indent-tabs-mode:nil
85 fill-column:99
86 End:
87*/
88// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :
Css & result
char * xml_quote_strdup(char const *src)
Definition quote.cpp:43
size_t xml_quoted_strlen(char const *val)
Returns the length of the string after quoting the characters "&<>.
Definition quote.cpp:18
TODO: insert short description here.
auto len
Definition safe-printf.h:21