保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var postcss = require("postcss");
 
/**
 * font variant convertion map
 *
 * @type {Object}
 */
var fontVariantProperties = {
  "font-variant-ligatures": {
    "common-ligatures": "\"liga\", \"clig\"",
    "no-common-ligatures": "\"liga\", \"clig off\"",
    "discretionary-ligatures": "\"dlig\"",
    "no-discretionary-ligatures": "\"dlig\" off",
    "historical-ligatures": "\"hlig\"",
    "no-historical-ligatures": "\"hlig\" off",
    contextual: "\"calt\"",
    "no-contextual": "\"calt\" off"
  },
 
  "font-variant-position": {
    sub: "\"subs\"",
    "super": "\"sups\"",
    normal: "\"subs\" off, \"sups\" off"
  },
 
  "font-variant-caps": {
    "small-caps": "\"smcp\"",
    "all-small-caps": "\"smcp\", \"c2sc\"",
    "petite-caps": "\"pcap\"",
    "all-petite-caps": "\"pcap\", \"c2pc\"",
    unicase: "\"unic\"",
    "titling-caps": "\"titl\""
  },
 
  "font-variant-numeric": {
    "lining-nums": "\"lnum\"",
    "oldstyle-nums": "\"onum\"",
    "proportional-nums": "\"pnum\"",
    "tabular-nums": "\"tnum\"",
    "diagonal-fractions": "\"frac\"",
    "stacked-fractions": "\"afrc\"",
    ordinal: "\"ordn\"",
    "slashed-zero": "\"zero\""
  },
 
  "font-kerning": {
    normal: "\"kern\"",
    none: "\"kern\" off"
  },
 
  "font-variant": {
    normal: "normal",
    inherit: "inherit"
  }
}
 
// The `font-variant` property is a shorthand for all the others.
for (var prop in fontVariantProperties) {
  var keys = fontVariantProperties[prop]
  for (var key in keys) {
    if (!(key in fontVariantProperties["font-variant"])) {
      fontVariantProperties["font-variant"][key] = keys[key]
    }
  }
}
 
// Find font-feature-settings declaration before given declaration,
// create if does not exist
function getFontFeatureSettingsPrevTo(decl) {
  var fontFeatureSettings = null;
  decl.parent.walkDecls(function(decl) {
    if (decl.prop === "font-feature-settings") {
      fontFeatureSettings = decl;
    }
  })
 
  if (fontFeatureSettings === null) {
    fontFeatureSettings = decl.clone()
    fontFeatureSettings.prop = "font-feature-settings"
    fontFeatureSettings.value = ""
    decl.parent.insertBefore(decl, fontFeatureSettings)
  }
  return fontFeatureSettings
}
 
/**
 * Expose the font-variant plugin.
 */
module.exports = postcss.plugin("postcss-font-variant", function() {
  return function(styles) {
    styles.walkRules(function(rule) {
      var fontFeatureSettings = null
      // read custom media queries
      rule.walkDecls(function(decl) {
        if (!fontVariantProperties[decl.prop]) {
          return null
        }
 
        var newValue = decl.value
        if (decl.prop === "font-variant") {
          newValue = decl.value.split(/\s+/g).map(function(val) {
            return fontVariantProperties["font-variant"][val]
          }).join(", ")
        }
        else if (fontVariantProperties[decl.prop][decl.value]) {
          newValue = fontVariantProperties[decl.prop][decl.value]
        }
 
        if (fontFeatureSettings === null) {
          fontFeatureSettings = getFontFeatureSettingsPrevTo(decl);
        }
        if (fontFeatureSettings.value && fontFeatureSettings.value !== newValue) {
          fontFeatureSettings.value += ", " + newValue;
        }
        else {
          fontFeatureSettings.value = newValue;
        }
      })
    })
  }
})