cmXCodeObject.cxx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #include "cmXCodeObject.h"
  2. #include "cmSystemTools.h"
  3. const char* cmXCodeObject::PBXTypeNames[] = {
  4. "PBXGroup", "PBXBuildStyle", "PBXProject", "PBXHeadersBuildPhase",
  5. "PBXSourcesBuildPhase", "PBXFrameworksBuildPhase", "PBXNativeTarget",
  6. "PBXFileReference", "PBXBuildFile", "PBXContainerItemProxy",
  7. "PBXTargetDependency", "PBXShellScriptBuildPhase",
  8. "PBXResourcesBuildPhase", "PBXApplicationReference",
  9. "PBXExecutableFileReference", "PBXLibraryReference", "PBXToolTarget",
  10. "PBXLibraryTarget", "PBXAggregateTarget",
  11. "None"
  12. };
  13. cmXCodeObject::~cmXCodeObject()
  14. {
  15. }
  16. //----------------------------------------------------------------------------
  17. cmXCodeObject::cmXCodeObject(PBXType ptype, Type type)
  18. {
  19. // m_cmTarget = 0;
  20. m_IsA = ptype;
  21. cmOStringStream str;
  22. str << (void*)this;
  23. str << (void*)this;
  24. str << (void*)this;
  25. m_Id = str.str();
  26. cmSystemTools::ReplaceString(m_Id, "0x", "");
  27. if(m_Id.size() < 24)
  28. {
  29. int diff = 24 - m_Id.size();
  30. for(int i =0; i < diff; ++i)
  31. {
  32. m_Id += "0";
  33. }
  34. }
  35. m_Type = type;
  36. if(m_Type == OBJECT)
  37. {
  38. this->AddAttribute("isa", 0);
  39. }
  40. }
  41. //----------------------------------------------------------------------------
  42. void cmXCodeObject::Indent(int level, std::ostream& out)
  43. {
  44. while(level)
  45. {
  46. out << " ";
  47. level--;
  48. }
  49. }
  50. //----------------------------------------------------------------------------
  51. void cmXCodeObject::Print(std::ostream& out)
  52. {
  53. cmXCodeObject::Indent(2, out);
  54. out << m_Id << " = {\n";
  55. std::map<cmStdString, cmXCodeObject*>::iterator i;
  56. for(i = m_ObjectAttributes.begin(); i != m_ObjectAttributes.end(); ++i)
  57. {
  58. cmXCodeObject* object = i->second;
  59. cmXCodeObject::Indent(3, out);
  60. if(i->first == "isa")
  61. {
  62. out << i->first << " = " << PBXTypeNames[m_IsA] << ";\n";
  63. }
  64. else if(object->m_Type == OBJECT_LIST)
  65. {
  66. out << i->first << " = (\n";
  67. for(unsigned int k = 0; k < i->second->m_List.size(); k++)
  68. {
  69. cmXCodeObject::Indent(4, out);
  70. out << i->second->m_List[k]->m_Id << ",\n";
  71. }
  72. cmXCodeObject::Indent(3, out);
  73. out << ");\n";
  74. }
  75. else if(object->m_Type == ATTRIBUTE_GROUP)
  76. {
  77. std::map<cmStdString, cmXCodeObject*>::iterator j;
  78. out << i->first << " = {\n";
  79. for(j = object->m_ObjectAttributes.begin(); j != object->m_ObjectAttributes.end(); ++j)
  80. {
  81. cmXCodeObject::Indent(4, out);
  82. out << j->first << " = " << j->second->m_String << ";\n";
  83. }
  84. cmXCodeObject::Indent(3, out);
  85. out << "};\n";
  86. }
  87. else if(object->m_Type == OBJECT_REF)
  88. {
  89. out << i->first << " = " << object->m_Object->m_Id << ";\n";
  90. }
  91. else if(object->m_Type == STRING)
  92. {
  93. out << i->first << " = " << object->m_String << ";\n";
  94. }
  95. else
  96. {
  97. out << "what is this?? " << i->first << "\n";
  98. }
  99. }
  100. cmXCodeObject::Indent(2, out);
  101. out << "};\n";
  102. }
  103. //----------------------------------------------------------------------------
  104. void cmXCodeObject::PrintList(std::vector<cmXCodeObject*> const& objs,
  105. std::ostream& out)
  106. {
  107. cmXCodeObject::Indent(1, out);
  108. out << "objects = {\n";
  109. for(unsigned int i = 0; i < objs.size(); ++i)
  110. {
  111. if(objs[i]->m_Type == OBJECT)
  112. {
  113. objs[i]->Print(out);
  114. }
  115. }
  116. cmXCodeObject::Indent(1, out);
  117. out << "};\n";
  118. }