mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Allow limiting string parse for numbers
This commit is contained in:
parent
eb1ad62632
commit
f0c46c6c90
@ -87,6 +87,8 @@ class pyobject_raii {
|
|||||||
PyObject *detach() { PyObject *ans = handle; handle = NULL; return ans; }
|
PyObject *detach() { PyObject *ans = handle; handle = NULL; return ans; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Parse numbers {{{
|
||||||
|
|
||||||
typedef long long integer_type;
|
typedef long long integer_type;
|
||||||
|
|
||||||
class ParsedNumber {
|
class ParsedNumber {
|
||||||
@ -133,12 +135,12 @@ parse_integer(const T &src, const size_t first, size_t last) {
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static ParsedNumber
|
static ParsedNumber
|
||||||
parse_css_number(const T &src) {
|
parse_css_number(const T &src, size_t limit = 0) {
|
||||||
int sign = 1, exponent_sign = 1;
|
int sign = 1, exponent_sign = 1;
|
||||||
integer_type integer_part = 0, fractional_part = 0, exponent_part = 0;
|
integer_type integer_part = 0, fractional_part = 0, exponent_part = 0;
|
||||||
unsigned num_of_fractional_digits = 0;
|
unsigned num_of_fractional_digits = 0;
|
||||||
size_t first_digit = 0, last_digit = 0;
|
size_t first_digit = 0, last_digit = 0;
|
||||||
const size_t src_sz = src.size();
|
const size_t src_sz = limit ? limit : src.size();
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
#define read_sign(which) { if (pos < src_sz && (src[pos] == '+' || src[pos] == '-')) { if (src[pos++] == '-') which = -1; }}
|
#define read_sign(which) { if (pos < src_sz && (src[pos] == '+' || src[pos] == '-')) { if (src[pos++] == '-') which = -1; }}
|
||||||
#define read_integer(which) { \
|
#define read_integer(which) { \
|
||||||
@ -173,6 +175,7 @@ parse_css_number(const T &src) {
|
|||||||
#undef read_sign
|
#undef read_sign
|
||||||
#undef read_integer
|
#undef read_integer
|
||||||
}
|
}
|
||||||
|
// }}}
|
||||||
|
|
||||||
enum class PropertyType : unsigned int {
|
enum class PropertyType : unsigned int {
|
||||||
font_size, page_break, non_standard_writing_mode
|
font_size, page_break, non_standard_writing_mode
|
||||||
|
Loading…
x
Reference in New Issue
Block a user