Home | History | Annotate | Download | only in fpdfdoc
      1 // Copyright 2016 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #include "core/fpdfdoc/cpvt_color.h"
      8 
      9 #include "core/fpdfapi/parser/cpdf_simple_parser.h"
     10 
     11 // Static.
     12 CPVT_Color CPVT_Color::ParseColor(const CFX_ByteString& str) {
     13   CPDF_SimpleParser syntax(str.AsStringC());
     14   if (syntax.FindTagParamFromStart("g", 1))
     15     return CPVT_Color(CPVT_Color::kGray, FX_atof(syntax.GetWord()));
     16 
     17   if (syntax.FindTagParamFromStart("rg", 3)) {
     18     FX_FLOAT f1 = FX_atof(syntax.GetWord());
     19     FX_FLOAT f2 = FX_atof(syntax.GetWord());
     20     FX_FLOAT f3 = FX_atof(syntax.GetWord());
     21     return CPVT_Color(CPVT_Color::kRGB, f1, f2, f3);
     22   }
     23   if (syntax.FindTagParamFromStart("k", 4)) {
     24     FX_FLOAT f1 = FX_atof(syntax.GetWord());
     25     FX_FLOAT f2 = FX_atof(syntax.GetWord());
     26     FX_FLOAT f3 = FX_atof(syntax.GetWord());
     27     FX_FLOAT f4 = FX_atof(syntax.GetWord());
     28     return CPVT_Color(CPVT_Color::kCMYK, f1, f2, f3, f4);
     29   }
     30   return CPVT_Color(CPVT_Color::kTransparent);
     31 }
     32 
     33 // Static.
     34 CPVT_Color CPVT_Color::ParseColor(const CPDF_Array& array) {
     35   CPVT_Color rt;
     36   switch (array.GetCount()) {
     37     case 1:
     38       rt = CPVT_Color(CPVT_Color::kGray, array.GetFloatAt(0));
     39       break;
     40     case 3:
     41       rt = CPVT_Color(CPVT_Color::kRGB, array.GetFloatAt(0),
     42                       array.GetFloatAt(1), array.GetFloatAt(2));
     43       break;
     44     case 4:
     45       rt = CPVT_Color(CPVT_Color::kCMYK, array.GetFloatAt(0),
     46                       array.GetFloatAt(1), array.GetFloatAt(2),
     47                       array.GetFloatAt(3));
     48       break;
     49   }
     50   return rt;
     51 }
     52