Repository: bokeh/bokeh

Issue:
Feature request: bold italic font specification
It would be convenient to configure text as both bold and italic (at the same time). I think something like any of the following might be nice ways of specifying this:

```python
text_font_style = 'bolditalic'
text_font_style = 'bold+italic'
text_font_style = 'italicbold'
```

Associated SO question: https://stackoverflow.com/questions/51772232/simultaneous-bold-and-italic-text-in-bokeh/51772730#51772730

Perhaps issue #596 refers the ability to change `font_style` at all


Discussion:
@smsaladi Thanks for the issue, the current enum values are exactly  permissible values to set for HTML canvas, and we would want to continue making sure bokeh allowed values are consistent with the allowed values on the canvas. That means only separating with a single space, e.g.:
```
text_font_style = "bold italic"
```

Resolving patch:
diff --git a/bokeh/core/enums.py b/bokeh/core/enums.py
--- a/bokeh/core/enums.py
+++ b/bokeh/core/enums.py
@@ -143,7 +143,7 @@ def enumeration(*values, **kwargs):
 LineCap = enumeration("butt", "round", "square")
 
 #: Specify the font style for rendering text
-FontStyle = enumeration("normal", "italic", "bold")
+FontStyle = enumeration("normal", "italic", "bold", "bold italic")
 
 #: Specify the vertical alignment for rendering text
 VerticalAlign = enumeration("top", "middle", "bottom")
diff --git a/bokeh/core/property_mixins.py b/bokeh/core/property_mixins.py
--- a/bokeh/core/property_mixins.py
+++ b/bokeh/core/property_mixins.py
@@ -188,6 +188,7 @@ class BaseTextProps(HasProps):
     - ``'normal'`` normal text
     - ``'italic'`` *italic text*
     - ``'bold'`` **bold text**
+    - ``"bold italic"`` ***bold italic text***
 
     """)
 
diff --git a/examples/plotting/file/text.py b/examples/plotting/file/text.py
--- a/examples/plotting/file/text.py
+++ b/examples/plotting/file/text.py
@@ -12,7 +12,7 @@
 p.xaxis.axis_label = "align"
 p.yaxis.axis_label = "baseline"
 p.axis.major_label_text_font_size = "18px"
-p.axis.major_label_text_font_style = "bold"
+p.axis.major_label_text_font_style = "bold italic"
 
 p.xgrid.grid_line_color = None
 p.ygrid.grid_line_color = None


Test patch:
diff --git a/bokeh/core/tests/test_enums.py b/bokeh/core/tests/test_enums.py
--- a/bokeh/core/tests/test_enums.py
+++ b/bokeh/core/tests/test_enums.py
@@ -27,6 +27,9 @@ def test_enumeration_default():
     e = enums.enumeration("foo", "bar", "baz")
     assert e._default == "foo"
 
+def test_FontStyle():
+    assert list(enums.FontStyle) == ['normal', 'italic', 'bold', 'bold italic']
+
 # any changes to contents of enums.py easily trackable here
 def test_enums_contents():
     assert [x for x in dir(enums) if x[0].isupper()] == [
diff --git a/bokehjs/test/core/enums.ts b/bokehjs/test/core/enums.ts
--- a/bokehjs/test/core/enums.ts
+++ b/bokehjs/test/core/enums.ts
@@ -12,7 +12,7 @@ describe("enums module", () => {
   })
 
   it("should have FontStyle", () => {
-    expect(enums.FontStyle).to.be.deep.equal(["normal", "italic", "bold"])
+    expect(enums.FontStyle).to.be.deep.equal(["normal", "italic", "bold", "bold italic"])
   })
 
   it("should have LineCap", () => {