diff --git a/ios/Text/RNSVGTSpan.m b/ios/Text/RNSVGTSpan.m index ca9a7f66..216160dd 100644 --- a/ios/Text/RNSVGTSpan.m +++ b/ios/Text/RNSVGTSpan.m @@ -86,36 +86,36 @@ CTFontRef runFont = CFDictionaryGetValue(attributes, kCTFontAttributeName); CGFloat lineStartX; - CGFloat lastX; + RNSVGGlyphPoint computedPoint; for(CFIndex i = 0; i < runGlyphCount; i++) { - RNSVGGlyphPoint computedPoint = [self getComputedGlyphPoint:i glyphOffset:positions[i]]; + computedPoint = [self getComputedGlyphPoint:i glyphOffset:positions[i]]; if (!i) { lineStartX = computedPoint.x; - lastX = lineStartX; } + CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyphs[i], nil); + CGAffineTransform textPathTransform = [self getTextPathTransform:computedPoint.x]; if (!textPathTransform.a || !textPathTransform.d) { - return path; + break; } - CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyphs[i], nil); CGAffineTransform transform; if (_bezierPath) { + textPathTransform = CGAffineTransformConcat(CGAffineTransformMakeTranslation(0, computedPoint.y), textPathTransform); transform = CGAffineTransformScale(textPathTransform, 1.0, -1.0); } else { transform = CGAffineTransformTranslate(upsideDown, computedPoint.x, -computedPoint.y); } CGPathAddPath(path, &transform, letter); - lastX += CGPathGetBoundingBox(letter).size.width; CGPathRelease(letter); } - [self getTextRoot].lastX = lastX; + [self getTextRoot].lastX = computedPoint.x; return path; } diff --git a/lib/extract/extractText.js b/lib/extract/extractText.js index 2e00bd76..31d79558 100644 --- a/lib/extract/extractText.js +++ b/lib/extract/extractText.js @@ -8,8 +8,7 @@ const fontRegExp = /^\s*((?:(?:normal|bold|italic)\s+)*)(?:(\d+(?:\.\d+)?)[ptexm const fontFamilyPrefix = /^[\s"']*/; const fontFamilySuffix = /[\s"']*$/; const spaceReg = /\s+/; -const deltaReg = /^((-?\d*(\.\d+)?)+\s*)+$/; -const commaReg = /,/; +const commaReg = /,/g; const anchors = { auto: 0, @@ -70,8 +69,12 @@ function extractFont(props) { } function parseDelta(delta) { - if (typeof delta === 'string' && deltaReg.test(delta)) { - return delta.trim().split(spaceReg).map(d => +d); + if (typeof delta === 'string') { + if (isNaN(+delta)) { + return delta.trim().replace(commaReg, ' ').split(spaceReg).map(d => +d || 0); + } else { + return [+delta]; + } } else if (typeof delta === 'number') { return [delta]; } else {