# GetNormalizedBodyText(uint)

> Gets the function's body text in an easy-to-read format.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor.ShaderApiReflection](/engine/6000.6/script-reference/unityeditor/shaderapireflection.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
public string GetNormalizedBodyText(uint tabWidth = 4)
```

### Parameters

**** (\[uint]\(https\://learn.microsoft.com/dotnet/api/system.uint32)): The number of spaces to use when converting any tab characters within the body text.

### Returns

| Type                                                           | Description                                     |
| -------------------------------------------------------------- | ----------------------------------------------- |
| [string](https://learn.microsoft.com/dotnet/api/system.string) | A readable version of the function's body text. |

### Remarks

This method performs the following operations on the body text:

* Tab characters are converted to spaces based on `tabWidth`.
* The text is left-aligned such that the least-indented line within the raw body text has zero indentation.

Additional Resources: [ReflectedFunction.BodyText](/engine/6000.6/script-reference/unityeditor/shaderapireflection/reflectedfunction/bodytext.md).

### Examples

```csharp
using UnityEditor;
using UnityEditor.ShaderApiReflection;
using UnityEngine;

// This example adds a menu item which prints information from reflected functions in any shader include
// assets selected in the project view.
public class ReflectedFunctionPrinter
{
    [MenuItem("Examples/ReflectedFunctionPrinter")]
    static void PrintReflectedFunctions()
    {
        // Visit each selected object
        foreach (Object selectedObject in Selection.objects)
        {
            // Check if the object is a ShaderInclude
            if (selectedObject is ShaderInclude includeObject)
            {
                Debug.Log("Found shader include at " + AssetDatabase.GetAssetPath(includeObject));

                // Visit each exposed function in the include
                foreach (ReflectedFunction func in includeObject.Reflection.ReflectedFunctions)
                    PrintFunction(func);
            }
        }
    }

    static void PrintFunction(ReflectedFunction func)
    {
        // Print the function's signature
        Debug.Log($"Found function with signature: {func.GetSignature()}");

        // Print the function's summary, if it exists
        if (func.Hints.TryGetValue("summary", out string funcSummary))
            Debug.Log($"{func.Name}'s doc comment: {funcSummary}");

        // Print the function's body text
        Debug.Log($"{func.Name}'s body:\n{func.GetNormalizedBodyText()}");

        // Visit each parameter
        foreach (ReflectedParameter param in func.Parameters)
        {
            // Print the parameter
            Debug.Log($"{func.Name} has parameter: {param.ToString()}");

            // Print the parameter's summary
            if (param.Hints.TryGetValue("summary", out string paramSummary))
                Debug.Log($"{param.Name}'s doc comment: {paramSummary}");
        }
    }
}
```
