public void GetCode()

in FigmaSharp/FigmaSharp/Services/CodeRendererService.cs [89:209]


		public void GetCode (StringBuilder builder, CodeNode node, CodeNode parent = null, CodeRenderServiceOptions currentRendererOptions = null, ITranslationService translateService = null)
		{
			//in first level we clear all identifiers
			if (parent == null) {
				if (MainNode == null) {

					//clear all nodes
					Nodes.Clear();

					identifiers.Clear ();
					OnStartGetCode ();

					//we initialize

					SetOptions(currentRendererOptions ?? new CodeRenderServiceOptions());

					TranslationService = translateService ?? TranslationService ?? new DefaultTranslationService();

					//we store our main node
					MainNode = node;
					ParentMainNode = parent;
				}
			}

			if (node != null)
				Nodes.Add(node);

			CodeNode calculatedParentNode = null;
			NodeConverter converter = null;

			var isNodeSkipped = IsNodeSkipped (node);

			//on node skipped we don't render
			if (!isNodeSkipped) {
				//if (figmaProvider.RendersProperties (node)) {
				converter = GetNodeConverter(node);

				if (converter != null) {
					if (!node.HasName) {

						if (!TryGetCodeViewName (node, parent, converter, out string identifier)) {
							identifier = DefaultViewName;
						}

						//we store our name to don't generate dupplicates
						var lastIndex = GetLastInsertedIndex (identifier);
						if (lastIndex >= 0) {
							identifiers.Remove (identifier);
						}
						lastIndex++;

						node.Name = identifier;
						if (lastIndex > 0) {
							node.Name += lastIndex;
						}
						identifiers.Add (identifier, lastIndex);
					}

					if (Options.ShowComments)
                    {
						builder.AppendLine();
						builder.AppendLine($"// View:     {node.Name}");
						builder.AppendLine($"// NodeName: {node.Node.name}");
						builder.AppendLine($"// NodeType: {node.Node.type}");
						builder.AppendLine($"// NodeId:   {node.Node.id}");
					}

					OnPreConvertToCode (builder, node, parent, converter, codePropertyConverter);
					//we generate our code and replace node name

					var code = converter.ConvertToCode (node, parent, this);
					builder.AppendLineIfValue (code.Replace (Resources.Ids.Conversion.NameIdentifier, node.Name));
					OnPostConvertToCode (builder, node, parent, converter, codePropertyConverter);

					//TODO: this could be removed to converters base
					if (Options.ShowAddChild && RendersAddChild(node, parent, this))
					{
						builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(PropertyNames.AddChild, node, parent, converter, this));
						OnChildAdded(builder, node, parent, converter, codePropertyConverter);
					}

					if (Options.ShowSize && RendersSize(node, parent, this))
                    {
						builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(PropertyNames.Frame, node, parent, converter, this));
						OnFrameSet(builder, node, parent, converter, codePropertyConverter);
					}

					if (Options.ShowConstraints && RendersConstraints(node, parent, this))
					{
						builder.AppendLineIfValue(codePropertyConverter.ConvertToCode(PropertyNames.Constraints, node, parent, converter, this));
					}

					calculatedParentNode = node;
				} else {
					//without a converter we don't have any view created, we need to attach to the parent view
					calculatedParentNode = parent;
				}
			}
			else
			{
				//if a node is skipped because is the first node we want to set as parent view
				if (node == MainNode)
				{
					calculatedParentNode = node;
				}
			}

			//without converter we scan the children automatically
			var navigateChild = Options.ScanChildren && (converter?.ScanChildren (node.Node) ?? true);
			if (navigateChild && HasChildrenToRender (node)) {
				foreach (var item in GetChildrenToRender (node)) {
					var figmaNode = new CodeNode(item, parent: node);
					GetCode (builder, figmaNode, calculatedParentNode);
				}
			}

			if (MainNode == node) {
				//first loop
				Clear ();
			}
		}