| 701 | } |
| 702 | |
| 703 | emscripten::val GetArgs(uint32_t modelID, bool inObject = false, bool inList = false) |
| 704 | { |
| 705 | auto loader = manager.GetIfcLoader(modelID); |
| 706 | auto arguments = emscripten::val::array(); |
| 707 | size_t size = 0; |
| 708 | bool endOfLine = false; |
| 709 | while (!loader->IsAtEnd() && !endOfLine) |
| 710 | { |
| 711 | webifc::parsing::IfcTokenType t = loader->GetTokenType(); |
| 712 | |
| 713 | switch (t) |
| 714 | { |
| 715 | case webifc::parsing::IfcTokenType::LINE_END: |
| 716 | { |
| 717 | endOfLine = true; |
| 718 | break; |
| 719 | } |
| 720 | case webifc::parsing::IfcTokenType::EMPTY: |
| 721 | { |
| 722 | arguments.set(size++, emscripten::val::null()); |
| 723 | break; |
| 724 | } |
| 725 | case webifc::parsing::IfcTokenType::SET_BEGIN: |
| 726 | { |
| 727 | arguments.set(size++, GetArgs(modelID, false, true)); |
| 728 | break; |
| 729 | } |
| 730 | case webifc::parsing::IfcTokenType::SET_END: |
| 731 | { |
| 732 | endOfLine = true; |
| 733 | break; |
| 734 | } |
| 735 | case webifc::parsing::IfcTokenType::LABEL: |
| 736 | { |
| 737 | // read label |
| 738 | auto obj = emscripten::val::object(); |
| 739 | obj.set("type", emscripten::val(static_cast<uint32_t>(webifc::parsing::IfcTokenType::LABEL))); |
| 740 | loader->StepBack(); |
| 741 | auto s = loader->GetStringArgument(); |
| 742 | auto typeCode = manager.GetSchemaManager().IfcTypeToTypeCode(s); |
| 743 | obj.set("typecode", emscripten::val(typeCode)); |
| 744 | // read set open |
| 745 | loader->GetTokenType(); |
| 746 | obj.set("value", GetArgs(modelID, true)); |
| 747 | arguments.set(size++, obj); |
| 748 | break; |
| 749 | } |
| 750 | case webifc::parsing::IfcTokenType::STRING: |
| 751 | case webifc::parsing::IfcTokenType::ENUM: |
| 752 | case webifc::parsing::IfcTokenType::REAL: |
| 753 | case webifc::parsing::IfcTokenType::INTEGER: |
| 754 | case webifc::parsing::IfcTokenType::REF: |
| 755 | { |
| 756 | loader->StepBack(); |
| 757 | emscripten::val obj; |
| 758 | if (inObject) |
| 759 | obj = ReadValue(modelID, t); |
| 760 | else |
no test coverage detected