I wound up not getting the computer out. Looking at it right now to see if it would be as easy as I was thinking.
Simply put, knowing how advanced org-mode can get with folds, this is likely trivial to do. (If you haven't played with it, I'd recommend taking a look. I don't have perfect examples, but http://taeric.github.io/DancingLinks.org is an example. Open that in emacs with org-mode and you will see that all of the source blocks can be folded together. For me, the source blocks are correctly colored, as well.)
Quickly searching, I found https://www.emacswiki.org/emacs/FoldingMode, which seems to be a large start to this. There were also some other ideas that seem to get close.
The basic idea I had was to just make a few functions that would:
- Fold from current location to next #endregion
- List all region/endregion's in the current buffer
- Fold all region/endregion's in the current buffer
The second of those felt trivial, since it is basically M-x occur #region\|#endregion. On top of that, I just need to learn how to actually make overlays and then the rest feels like it would fall into place easily enough.
Edit: It occurs to me that I didn't show how to actually hide text, which I think is your question. Fastest way I can see is this (run this in your scratch buffer to see it in action):
(let ((o (make-overlay 5 120)))
(overlay-put o 'display "---hidden---"))
To easily delete this particular overlay, if you make it, use:
(let ((o (overlays-at 5)))
(mapcar 'delete-overlay o))
So, the basic task that will need to be completed is finding the point position for the start and end of make-overlay.