[Question]
  [
## Background
I wanted to make a pretty word cloud, like this:
```
these    are
    words   
  floating  
```
I computed the `(x,y)`-coordinates of the first letter of each word, plugged them into my word cloud generator, and let it do its job.
However, I accidentally used `(y,x)`-coordinates, so the result looks like this:
```
these      
   floating
 words     
are        
```
Since I'm too lazy to re-compute the coordinates, I need you to transpose the word cloud for me.
## Input
Your input is a rectangular grid of lowercase ASCII letters and spaces.
This means that every row is padded with spaces to have the same length.
The input can be taken as a multi-line string or an array of strings.
A *word* is a horizontal segment of letters, and its *position* is the `(x,y)`-coordinates of its leftmost letter, the upper left corner of the grid being `(0,0)`.
There will always be at least one word, and there are no trailing rows or columns of spaces.
However, leading rows or columns of spaces may be present.
## Output
Your output is another rectangular grid of characters, obtained by moving every word with position `(x,y)` to position `(y,x)`.
Your output **must not contain** extra trailing rows or columns of spaces.
Leading rows and columns must be preserved, and the output **must be rectangular**.
You may assume that this transformation does not create overlapping words, and does not merge several words into one.
This means that running the program on the output should produce the original input.
## Rules and scoring
You can write a full program or a function.
The lowest byte count wins, and standard loopholes are disallowed.
## Test cases
For clarity (and since Stack Exchange dislikes space-only lines), every row ends in a pipe character `|`.
**These are not part of the actual input or output**, and you should remove them.
Note again that running the program on each output should also produce the corresponding input.
```
Input:
oneword|
Output:
oneword|
Input:
  spaces|
Output:
      |
      |
spaces|
Input:
   |
row|
Output:
 row|
Input:
these    are|
    words   |
            |
  floating  |
Output:
these      |
           |
   floating|
           |
 words     |
           |
           |
           |
are        |
Input:
   same|
 the   |
       |
same   |
Output:
   same|
 the   |
       |
same   |
Input:
  some |
words k|
       |
       |
       |
  still|
Output:
 words    |
          |
some still|
          |
          |
          |
 k        |
Input:
   hello   |
  world hey|
what   up  |
Output:
  what|
      |
 world|
hello |
      |
      |
      |
  up  |
 hey  |
Input:
  a b  a d cc|
 g h  huh nng|
  ye dunnn   |
    dud  yo  |
 wha   g     |
  huh heh hah|
Output:
        |
 g  wha |
a ye huh|
 h      |
b  dud  |
  dunnn |
 huh heh|
a   g   |
        |
d  yo   |
 nng hah|
cc      |
```
  
[Answer]
# Perl, 58 bytes
Added +2 for `-lp`
Give input on STDIN, run as `perl -lp wordcloud.pl`
`wordcloud.pl`:
```
s/\w+/$l|=$a[pos]|=$"x~-$..$&/eg}for(@a){$_|=$l=~y// /cr
```
[Answer]
# [APL (Dyalog Unicode)](https://www.dyalog.com/), 107 bytes
```
{x←' '⍴⍨×⍨2/⌈/⍴⍵⋄(⌈⌿↑⍸' '≠x)↑x⊣{x⊢←(⊃⍵)@((⊃⌽⍵)∘+¨↓0,⍪1-⍨⍳≢⊃⍵)⊢x}¨↓(⊃,/' '(≠⊆⊢)¨↓⍵),⍪⌽¨⍸2{1 0≡' '=⍺⍵}/' ',⍵}
```
[Try it online!](https://tio.run/##bVBNSwJRFN37K97uKSl@RBSBELipbbVp@XLGmeg1I42SIq6KQc0nRUgt@9hIBC5KiCAC@yf3j9i5zyKDHsx79557zrn3jqrqjNNUOvRmNBiW9oR0KkEkE9SJS4LiC9Ei81acjvPruqwiV5CZtGetBipSSDIvZEaf17gKWep3shaY0PlZEhn1Pyi@JPPKzO5tI4WsQb0HqHv3MEhS7xTs1EbSRv13TqhzszQdUXyVS5N5zGdgTeaZuvffZEgbbUtgUToL7yTMqRejkrIFprEYjsjNa6GVFznq3oFaxDK8AcvSdpUKBiEzsO5PGH86XuahB8Od7RLu3c2tnZkHTgsJnpVcVmYkFqzYP5HwRF6sQibDwD0Jjx1pkTVGhIiqquxGDMFS1nwX/w9HHbtozxErIrw2rehQ1Q4CD@m3ApVIHVkyxD88exBxSSySoxAACnPXwz/k/6OodqD1Qjff1Tr8KcJGO4CabOmrGvB6dbGfEvt8OaJcZoEnfDjUfREEnjVousKpB0Hw29epO4DDeQ5PQN7vNKz1XXzKl18 "APL (Dyalog Unicode) – Try It Online")
Makes an over-big matrix of spaces, and adds in the required words using `@`. Then, crops back to the required size.
]