| // Copyright 2016 PDFium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| |
| #include "core/fpdfdoc/cpvt_color.h" |
| |
| #include "core/fpdfapi/parser/cpdf_simple_parser.h" |
| |
| // Static. |
| CPVT_Color CPVT_Color::ParseColor(const CFX_ByteString& str) { |
| CPDF_SimpleParser syntax(str.AsStringC()); |
| if (syntax.FindTagParamFromStart("g", 1)) |
| return CPVT_Color(CPVT_Color::kGray, FX_atof(syntax.GetWord())); |
| |
| if (syntax.FindTagParamFromStart("rg", 3)) { |
| float f1 = FX_atof(syntax.GetWord()); |
| float f2 = FX_atof(syntax.GetWord()); |
| float f3 = FX_atof(syntax.GetWord()); |
| return CPVT_Color(CPVT_Color::kRGB, f1, f2, f3); |
| } |
| if (syntax.FindTagParamFromStart("k", 4)) { |
| float f1 = FX_atof(syntax.GetWord()); |
| float f2 = FX_atof(syntax.GetWord()); |
| float f3 = FX_atof(syntax.GetWord()); |
| float f4 = FX_atof(syntax.GetWord()); |
| return CPVT_Color(CPVT_Color::kCMYK, f1, f2, f3, f4); |
| } |
| return CPVT_Color(CPVT_Color::kTransparent); |
| } |
| |
| // Static. |
| CPVT_Color CPVT_Color::ParseColor(const CPDF_Array& array) { |
| CPVT_Color rt; |
| switch (array.GetCount()) { |
| case 1: |
| rt = CPVT_Color(CPVT_Color::kGray, array.GetFloatAt(0)); |
| break; |
| case 3: |
| rt = CPVT_Color(CPVT_Color::kRGB, array.GetFloatAt(0), |
| array.GetFloatAt(1), array.GetFloatAt(2)); |
| break; |
| case 4: |
| rt = CPVT_Color(CPVT_Color::kCMYK, array.GetFloatAt(0), |
| array.GetFloatAt(1), array.GetFloatAt(2), |
| array.GetFloatAt(3)); |
| break; |
| } |
| return rt; |
| } |