patch 9.0.0067: cannot show virtual text

Problem:    Cannot show virtual text.
Solution:   Initial changes for virtual text support, using text properties.
diff --git a/src/structs.h b/src/structs.h
index 11c3726..1d2aa0a 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -806,8 +806,9 @@
     int		tp_flags;	// TP_FLAG_ values
 } textprop_T;
 
-#define TP_FLAG_CONT_NEXT	1	// property continues in next line
-#define TP_FLAG_CONT_PREV	2	// property was continued from prev line
+#define TP_FLAG_CONT_NEXT	0x1	// property continues in next line
+#define TP_FLAG_CONT_PREV	0x2	// property was continued from prev line
+#define TP_VIRTUAL		0x4	// virtual text, uses tp_id
 
 /*
  * Structure defining a property type.
@@ -3074,6 +3075,7 @@
 #ifdef FEAT_PROP_POPUP
     int		b_has_textprop;	// TRUE when text props were added
     hashtab_T	*b_proptypes;	// text property types local to buffer
+    garray_T	b_textprop_text; // stores text for props, index by (-id - 1)
 #endif
 
 #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
@@ -4560,3 +4562,18 @@
     char_u	*str;
     int		score;
 } fuzmatch_str_T;
+
+// Argument for lbr_chartabsize().
+typedef struct {
+    win_T	*cts_win;
+    linenr_T	cts_lnum;	    // zero when not using text properties
+    char_u	*cts_line;	    // start of the line
+    char_u	*cts_ptr;	    // current position in line
+#ifdef FEAT_PROP_POPUP
+    int		cts_text_prop_count;	// number of text props
+    textprop_T	*cts_text_props;	// text props (allocated) or NULL
+    char	cts_has_prop_with_text;  // TRUE if if a property inserts text
+    int         cts_cur_text_width;     // width of current inserted text
+#endif
+    int		cts_vcol;	    // virtual column at current position
+} chartabsize_T;