Browse Source

support font family style in markdown highlighting

Signed-off-by: Le Tan <[email protected]>
Le Tan 9 years ago
parent
commit
eb5b6a6276
3 changed files with 37 additions and 1 deletions
  1. 4 0
      resources/styles/default.mdhl
  2. 31 1
      vstyleparser.cpp
  3. 2 0
      vstyleparser.h

+ 4 - 0
resources/styles/default.mdhl

@@ -1,6 +1,9 @@
 # This is the default markdown styles used for Peg-Markdown-Highlight
 # Created by Le Tan ([email protected])
 
+editor
+font-family: Georgia, Palatino, Arial, serif
+
 H1
 foreground: 111111
 font-style: bold
@@ -59,6 +62,7 @@ foreground: b58900
 
 CODE
 foreground: af5f00
+font-family: Consolas, Monaco, Andale Mono, monospace
 
 EMPH
 font-style: italic

+ 31 - 1
vstyleparser.cpp

@@ -1,12 +1,14 @@
 #include "vstyleparser.h"
 
 #include <QFont>
+#include <QFontDatabase>
 #include <QPalette>
 #include <QTextEdit>
 #include <QColor>
 #include <QBrush>
 #include <QVector>
 #include <QtDebug>
+#include <QStringList>
 
 VStyleParser::VStyleParser()
 {
@@ -69,7 +71,13 @@ QTextCharFormat VStyleParser::QTextCharFormatFromAttrs(pmh_style_attribute *attr
         }
 
         case pmh_attr_type_font_family:
-            // TODO
+        {
+            QString familyList(attrs->value->font_family);
+            QString finalFamily = filterAvailableFontFamily(familyList);
+            if (!finalFamily.isEmpty()) {
+                format.setFontFamily(finalFamily);
+            }
+        }
             break;
 
         case pmh_attr_type_font_style:
@@ -172,3 +180,25 @@ QPalette VStyleParser::fetchMarkdownEditorStyles(const QPalette &basePalette) co
 
     return palette;
 }
+
+// @familyList is a comma separated string
+QString VStyleParser::filterAvailableFontFamily(const QString &familyList) const
+{
+    QStringList families = familyList.split(',', QString::SkipEmptyParts);
+    QStringList availFamilies = QFontDatabase().families();
+
+    qDebug() << "family:" << familyList;
+    for (int i = 0; i < families.size(); ++i) {
+        QString family = families[i].trimmed().toLower();
+        for (int j = 0; j < availFamilies.size(); ++j) {
+            QString availFamily = availFamilies[j];
+            availFamily.remove(QRegExp("\\[.*\\]"));
+            if (family == availFamily.trimmed().toLower()) {
+                qDebug() << "matched family:" << availFamilies[j];
+                return availFamilies[j];
+            }
+        }
+    }
+
+    return QString();
+}

+ 2 - 0
vstyleparser.h

@@ -3,6 +3,7 @@
 
 #include <QPalette>
 #include <QVector>
+#include <QString>
 #include "hgmarkdownhighlighter.h"
 
 extern "C" {
@@ -28,6 +29,7 @@ private:
     QBrush QBrushFromPmhAttr(pmh_attr_argb_color *attr) const;
     QTextCharFormat QTextCharFormatFromAttrs(pmh_style_attribute *attrs,
                                              const QFont &baseFont) const;
+    QString filterAvailableFontFamily(const QString &familyList) const;
     pmh_style_collection *markdownStyles;
 };