@plone/volto 17.0.0-alpha.6 → 17.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/package.json +1 -1
  3. package/packages/volto-slate/package.json +1 -1
  4. package/src/actions/language/language.js +8 -8
  5. package/src/components/manage/Add/Add.jsx +2 -2
  6. package/src/components/manage/Blocks/Search/components/DateRangeFacet.jsx +4 -1
  7. package/src/components/manage/Multilingual/CreateTranslation.jsx +2 -2
  8. package/src/components/manage/Multilingual/TranslationObject.jsx +4 -3
  9. package/src/components/manage/Preferences/PersonalPreferences.jsx +2 -2
  10. package/src/components/manage/Toolbar/Types.jsx +2 -2
  11. package/src/components/manage/Widgets/DatetimeWidget.jsx +9 -5
  12. package/src/components/manage/Widgets/RecurrenceWidget/ByDayField.jsx +2 -1
  13. package/src/components/manage/Widgets/RecurrenceWidget/MonthOfTheYearField.jsx +2 -1
  14. package/src/components/manage/Widgets/RecurrenceWidget/Occurences.jsx +2 -1
  15. package/src/components/manage/Widgets/RecurrenceWidget/RecurrenceWidget.jsx +7 -2
  16. package/src/components/manage/Widgets/RecurrenceWidget/WeekdayOfTheMonthField.jsx +2 -1
  17. package/src/components/theme/Footer/Footer.jsx +2 -13
  18. package/src/components/theme/LanguageSelector/LanguageSelector.js +8 -3
  19. package/src/components/theme/Logo/Logo.jsx +2 -1
  20. package/src/components/theme/MultilingualRedirector/MultilingualRedirector.jsx +2 -2
  21. package/src/components/theme/Navigation/NavItem.jsx +4 -2
  22. package/src/components/theme/Sitemap/Sitemap.jsx +5 -3
  23. package/src/components/theme/View/EventDatesInfo.jsx +2 -1
  24. package/src/components/theme/Widgets/DateWidget.jsx +2 -1
  25. package/src/components/theme/Widgets/DatetimeWidget.jsx +2 -1
  26. package/src/helpers/Utils/Utils.js +21 -9
  27. package/src/helpers/Utils/Utils.test.js +4 -4
  28. package/src/helpers/index.js +5 -2
  29. package/src/middleware/api.js +7 -3
  30. package/src/server.jsx +28 -23
  31. package/.changelog.draft +0 -33
  32. package/.editorconfig +0 -36
  33. package/.storybook/main.js +0 -127
  34. package/.storybook/manager.js +0 -15
  35. package/.storybook/preview.js +0 -21
  36. package/.storybook/static/previewImage.svg +0 -48
  37. package/.vale.ini +0 -10
  38. package/.yarnrc.yml +0 -5
  39. package/jsdoc.json +0 -16
  40. package/netlify.toml +0 -5
  41. package/pyvenv.cfg +0 -3
  42. package/share/man/man1/ttx.1 +0 -225
  43. package/styles/Vocab/Base/accept.txt +0 -0
  44. package/styles/Vocab/Base/reject.txt +0 -0
  45. package/styles/Vocab/Plone/accept.txt +0 -10
  46. package/styles/Vocab/Plone/reject.txt +0 -5
  47. package/towncrier.toml +0 -33
@@ -18,7 +18,11 @@ import {
18
18
  SET_APIERROR,
19
19
  } from '@plone/volto/constants/ActionTypes';
20
20
  import { changeLanguage } from '@plone/volto/actions';
21
- import { normalizeLanguageName, getCookieOptions } from '@plone/volto/helpers';
21
+ import {
22
+ toGettextLang,
23
+ toReactIntlLang,
24
+ getCookieOptions,
25
+ } from '@plone/volto/helpers';
22
26
  let socket = null;
23
27
 
24
28
  /**
@@ -205,11 +209,11 @@ const apiMiddlewareFactory = (api) => ({ dispatch, getState }) => (next) => (
205
209
  const lang = result?.language?.token;
206
210
  if (
207
211
  lang &&
208
- getState().intl.language !== lang &&
212
+ getState().intl.locale !== toReactIntlLang(lang) &&
209
213
  !subrequest &&
210
214
  config.settings.supportedLanguages.includes(lang)
211
215
  ) {
212
- const langFileName = normalizeLanguageName(lang);
216
+ const langFileName = toGettextLang(lang);
213
217
  import('~/../locales/' + langFileName + '.json').then((locale) => {
214
218
  dispatch(changeLanguage(lang, locale.default));
215
219
  });
package/src/server.jsx CHANGED
@@ -26,8 +26,9 @@ import {
26
26
  Html,
27
27
  Api,
28
28
  persistAuthToken,
29
- normalizeLanguageName,
30
- toLangUnderscoreRegion,
29
+ toBackendLang,
30
+ toGettextLang,
31
+ toReactIntlLang,
31
32
  } from '@plone/volto/helpers';
32
33
  import { changeLanguage } from '@plone/volto/actions';
33
34
 
@@ -44,9 +45,9 @@ let locales = {};
44
45
 
45
46
  if (config.settings) {
46
47
  config.settings.supportedLanguages.forEach((lang) => {
47
- const langFileName = normalizeLanguageName(lang);
48
+ const langFileName = toGettextLang(lang);
48
49
  import('@root/../locales/' + langFileName + '.json').then((locale) => {
49
- locales = { ...locales, [lang]: locale.default };
50
+ locales = { ...locales, [toReactIntlLang(lang)]: locale.default };
50
51
  });
51
52
  });
52
53
  }
@@ -101,13 +102,15 @@ server.use(function (err, req, res, next) {
101
102
  function setupServer(req, res, next) {
102
103
  const api = new Api(req);
103
104
 
104
- const lang = new locale.Locales(
105
- req.universalCookies.get('I18N_LANGUAGE') ||
106
- config.settings.defaultLanguage ||
107
- req.headers['accept-language'],
108
- )
109
- .best(supported)
110
- .toString();
105
+ const lang = toReactIntlLang(
106
+ new locale.Locales(
107
+ req.universalCookies.get('I18N_LANGUAGE') ||
108
+ config.settings.defaultLanguage ||
109
+ req.headers['accept-language'],
110
+ )
111
+ .best(supported)
112
+ .toString(),
113
+ );
111
114
 
112
115
  // Minimum initial state for the fake Redux store instance
113
116
  const initialState = {
@@ -176,13 +179,15 @@ server.get('/*', (req, res) => {
176
179
 
177
180
  const browserdetect = detect(req.headers['user-agent']);
178
181
 
179
- const lang = new locale.Locales(
180
- req.universalCookies.get('I18N_LANGUAGE') ||
181
- config.settings.defaultLanguage ||
182
- req.headers['accept-language'],
183
- )
184
- .best(supported)
185
- .toString();
182
+ const lang = toReactIntlLang(
183
+ new locale.Locales(
184
+ req.universalCookies.get('I18N_LANGUAGE') ||
185
+ config.settings.defaultLanguage ||
186
+ req.headers['accept-language'],
187
+ )
188
+ .best(supported)
189
+ .toString(),
190
+ );
186
191
 
187
192
  const authToken = req.universalCookies.get('auth_token');
188
193
  const initialState = {
@@ -217,7 +222,7 @@ server.get('/*', (req, res) => {
217
222
 
218
223
  loadOnServer({ store, location, routes, api })
219
224
  .then(() => {
220
- const cookie_lang =
225
+ const initialLang =
221
226
  req.universalCookies.get('I18N_LANGUAGE') ||
222
227
  config.settings.defaultLanguage ||
223
228
  req.headers['accept-language'];
@@ -230,15 +235,15 @@ server.get('/*', (req, res) => {
230
235
  // present the language token field, for some reason. In this case, we
231
236
  // should follow the cookie rather then switching the language
232
237
  const contentLang = store.getState().content.get?.error
233
- ? cookie_lang
238
+ ? initialLang
234
239
  : store.getState().content.data?.language?.token ||
235
240
  config.settings.defaultLanguage;
236
241
 
237
- if (cookie_lang !== contentLang) {
238
- const newLocale = toLangUnderscoreRegion(
242
+ if (toBackendLang(initialLang) !== contentLang) {
243
+ const newLang = toReactIntlLang(
239
244
  new locale.Locales(contentLang).best(supported).toString(),
240
245
  );
241
- store.dispatch(changeLanguage(newLocale, locales[newLocale], req));
246
+ store.dispatch(changeLanguage(newLang, locales[newLang], req));
242
247
  }
243
248
 
244
249
  const context = {};
package/.changelog.draft DELETED
@@ -1,33 +0,0 @@
1
- ## 17.0.0-alpha.6 (2023-05-11)
2
-
3
- ### Feature
4
-
5
- - Changed control panel list to be fetched server-side not client-side
6
- @JeffersonBledsoe [#3749](https://github.com/plone/volto/issues/3749)
7
-
8
- ### Bugfix
9
-
10
- - Apply suggestion from browser for password field @lord2anil [#3990](https://github.com/plone/volto/issues/3990)
11
- - Open all accordion'd content in InlineForm by default, allow arbitrarily close any number of them. @sneridagh [#4178](https://github.com/plone/volto/issues/4178)
12
- - Fix duplicating listing block by removing block uid from blocks data. @ksuess [#4234](https://github.com/plone/volto/issues/4234)
13
- - The tabs for the add page was unresponsive on mobile devices. Fixed this by changing flex-wrap property. @sudhanshu1309 [#4506](https://github.com/plone/volto/issues/4506)
14
- - (fix):Object.normaliseMail: Cannot read properties of null @dobri1408 [#4558](https://github.com/plone/volto/issues/4558)
15
- - Update add-on control panel tranlsations: install -> activate. @ksuess [#4582](https://github.com/plone/volto/issues/4582)
16
- - Fix robot.txt - the sitemap link should respect x-forwarded headers @reebalazs [#4638](https://github.com/plone/volto/issues/4638)
17
- - Fix Move to top of folder ordering in folder content view by searching also @iFlameing [#4690](https://github.com/plone/volto/issues/4690)
18
- - Fix faulty D&D elements in ObjectBrowserList widget @sneridagh [#4703](https://github.com/plone/volto/issues/4703)
19
- - Fix fetching API paths with urlencoded characters in the querystring. @davisagli [#4718](https://github.com/plone/volto/issues/4718)
20
-
21
- ### Internal
22
-
23
- - Change conditional checking to optional chaining for a theme icon @nilootpal [#4567](https://github.com/plone/volto/issues/4567)
24
- - Security upgrade for momentjs [#4715](https://github.com/plone/volto/issues/4715)
25
- - Upgrade to Plone 6.0.4 @sneridagh [#4743](https://github.com/plone/volto/issues/4743)
26
-
27
- ### Documentation
28
-
29
- - Added documentation regarding the static middleware. @BhardwajAditya-github [#4518](https://github.com/plone/volto/issues/4518)
30
- - Use new URL `6.docs.plone.org`. @stevepiercy [#4726](https://github.com/plone/volto/issues/4726)
31
- - Synch stuff from `16.x.x` branch that should have been in `master` as well. @stevepiercy [#4728](https://github.com/plone/volto/issues/4728)
32
- - Fix link in Volto, remove from linkcheck ignore in Documentation. @stevepiercy [#4742](https://github.com/plone/volto/issues/4742)
33
-
package/.editorconfig DELETED
@@ -1,36 +0,0 @@
1
- # EditorConfig Configurtaion file, for more details see:
2
- # http://EditorConfig.org
3
- # EditorConfig is a convention description, that could be interpreted
4
- # by multiple editors to enforce common coding conventions for specific
5
- # file types
6
-
7
- # top-most EditorConfig file:
8
- # Will ignore other EditorConfig files in Home directory or upper tree level.
9
- root = true
10
-
11
-
12
- [*] # For All Files
13
- # Unix-style newlines with a newline ending every file
14
- end_of_line = lf
15
- insert_final_newline = true
16
- trim_trailing_whitespace = true
17
- # Set default charset
18
- charset = utf-8
19
- # Indent style default
20
- indent_style = space
21
- # Max Line Length - a hard line wrap, should be disabled
22
- max_line_length = off
23
-
24
- [*.{py,cfg,ini}]
25
- # 4 space indentation
26
- indent_size = 4
27
-
28
- [*.{html,dtml,pt,zpt,xml,zcml,js,jsx,json,less,css,yaml,yml}]
29
- # 2 space indentation
30
- indent_size = 2
31
-
32
- [{Makefile,.gitmodules}]
33
- # Tab indentation (no size specified, but view as 4 spaces)
34
- indent_style = tab
35
- indent_size = unset
36
- tab_width = unset
@@ -1,127 +0,0 @@
1
- const webpack = require('webpack');
2
- const fs = require('fs');
3
- const path = require('path');
4
- const makeLoaderFinder = require('razzle-dev-utils/makeLoaderFinder');
5
- const fileLoaderFinder = makeLoaderFinder('file-loader');
6
- const projectRootPath = path.resolve('.');
7
- const lessPlugin = require('../webpack-plugins/webpack-less-plugin');
8
- const createConfig = require('../node_modules/razzle/config/createConfigAsync.js');
9
- const razzleConfig = require(path.join(projectRootPath, 'razzle.config.js'));
10
- const SVGLOADER = {
11
- test: /icons\/.*\.svg$/,
12
- use: [
13
- {
14
- loader: 'svg-loader',
15
- },
16
- {
17
- loader: 'svgo-loader',
18
- options: {
19
- plugins: [
20
- {
21
- name: 'preset-default',
22
- params: {
23
- overrides: {
24
- convertPathData: false,
25
- removeViewBox: false,
26
- },
27
- },
28
- },
29
- 'removeTitle',
30
- 'removeUselessStrokeAndFill',
31
- ],
32
- },
33
- },
34
- ],
35
- };
36
- const defaultRazzleOptions = {
37
- verbose: false,
38
- debug: {},
39
- buildType: 'iso',
40
- cssPrefix: 'static/css',
41
- jsPrefix: 'static/js',
42
- enableSourceMaps: true,
43
- enableReactRefresh: true,
44
- enableTargetBabelrc: false,
45
- enableBabelCache: true,
46
- forceRuntimeEnvVars: [],
47
- mediaPrefix: 'static/media',
48
- staticCssInDev: false,
49
- emitOnErrors: false,
50
- disableWebpackbar: false,
51
- browserslist: ['>1%', 'last 4 versions', 'Firefox ESR', 'not ie 11', 'not dead']
52
- };
53
- module.exports = {
54
- stories: ['../src/**/*.stories.mdx', '../src/**/*.stories.@(js|jsx|ts|tsx)'],
55
- addons: ['@storybook/addon-links', '@storybook/addon-essentials'],
56
- staticDirs: ['./static'],
57
- webpackFinal: async (config, {
58
- configType
59
- }) => {
60
- // `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION'
61
- // You can change the configuration based on that.
62
- // 'PRODUCTION' is used when building the static version of storybook.
63
-
64
- // Make whatever fine-grained changes you need
65
- let baseConfig;
66
- baseConfig = await createConfig('web', 'dev', {
67
- // clearConsole: false,
68
- modifyWebpackConfig: razzleConfig.modifyWebpackConfig,
69
- plugins: razzleConfig.plugins
70
- }, webpack, false, undefined, [], defaultRazzleOptions);
71
- const AddonConfigurationRegistry = require('../addon-registry');
72
- const registry = new AddonConfigurationRegistry(projectRootPath);
73
- config = lessPlugin({
74
- registry
75
- }).modifyWebpackConfig({
76
- env: {
77
- target: 'web',
78
- dev: 'dev'
79
- },
80
- webpackConfig: config,
81
- webpackObject: webpack,
82
- options: {}
83
- });
84
-
85
- // Put the SVG loader on top and prevent the asset/resource rule
86
- // from processing the app's SVGs
87
- config.module.rules.unshift(SVGLOADER);
88
- const fileLoaderRule = config.module.rules.find(rule => rule.test.test('.svg'));
89
- fileLoaderRule.exclude = /icons\/.*\.svg$/;
90
- config.plugins.unshift(new webpack.DefinePlugin({
91
- __DEVELOPMENT__: true,
92
- __CLIENT__: true,
93
- __SERVER__: false
94
- }));
95
- const resultConfig = {
96
- ...config,
97
- resolve: {
98
- ...config.resolve,
99
- alias: {
100
- ...config.resolve.alias,
101
- ...baseConfig.resolve.alias
102
- }
103
- }
104
- };
105
-
106
- // Addons have to be loaded with babel
107
- const addonPaths = registry.addonNames.map(addon => fs.realpathSync(registry.packages[addon].modulePath));
108
- resultConfig.module.rules[1].exclude = input =>
109
- // exclude every input from node_modules except from @plone/volto
110
- /node_modules\/(?!(@plone\/volto)\/)/.test(input) &&
111
- // If input is in an addon, DON'T exclude it
112
- !addonPaths.some(p => input.includes(p));
113
- return resultConfig;
114
- },
115
- babel: async options => {
116
- return {
117
- ...options,
118
- plugins: [...options.plugins, ['./node_modules/babel-plugin-root-import/build/index.js', {
119
- rootPathSuffix: './src'
120
- }]]
121
- // any extra options you want to set
122
- };
123
- },
124
- core: {
125
- builder: 'webpack5'
126
- }
127
- };
@@ -1,15 +0,0 @@
1
- import { addons } from '@storybook/addons';
2
-
3
- addons.setConfig({
4
- isFullscreen: false,
5
- showNav: true,
6
- showPanel: true,
7
- panelPosition: 'bottom',
8
- sidebarAnimations: true,
9
- enableShortcuts: true,
10
- isToolshown: true,
11
- theme: undefined,
12
- selectedPanel: undefined,
13
- initialActive: 'sidebar',
14
- showRoots: true,
15
- });
@@ -1,21 +0,0 @@
1
- import '@plone/volto/config'; // This is the bootstrap for the global config - client side
2
- import React from 'react';
3
- import { StaticRouter } from 'react-router-dom';
4
- import { IntlProvider } from 'react-intl';
5
- import enMessages from '@root/../locales/en.json';
6
-
7
- import '@root/theme';
8
-
9
- export const parameters = {
10
- actions: { argTypesRegex: '^on[A-Z].*' },
11
- };
12
-
13
- export const decorators = [
14
- (Story) => (
15
- <IntlProvider messages={enMessages} locale="en" defaultLocale="en">
16
- <StaticRouter location="/">
17
- <Story />
18
- </StaticRouter>
19
- </IntlProvider>
20
- ),
21
- ];
@@ -1,48 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <!-- Generator: Adobe Illustrator 13.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
3
- <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
- <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
- width="158.253px" height="40.686px" viewBox="0 0 158.253 40.686" enable-background="new 0 0 158.253 40.686"
6
- xml:space="preserve">
7
- <g>
8
- <path fill="#0095D3" d="M65.327,23.208h-6.589v11.388h-4.393V5.638h10.981c5.653,0,9.271,3.742,9.271,8.785
9
- S70.979,23.208,65.327,23.208z M65.082,9.583h-6.345v9.639h6.345c3.05,0,5.124-1.749,5.124-4.799
10
- C70.206,11.372,68.132,9.583,65.082,9.583z"/>
11
- <path fill="#0095D3" d="M83.969,34.596c-3.904,0-5.652-2.644-5.652-5.693V5.638h4.148v23.021c0,1.587,0.567,2.399,2.235,2.399h1.83
12
- v3.538H83.969z"/>
13
- <path fill="#0095D3" d="M104.762,32.399c-1.344,1.384-3.377,2.44-6.184,2.44c-2.805,0-4.799-1.058-6.141-2.44
14
- c-1.951-2.032-2.439-4.637-2.439-8.134c0-3.457,0.488-6.061,2.439-8.094c1.342-1.383,3.336-2.44,6.141-2.44
15
- c2.807,0,4.84,1.059,6.184,2.44c1.951,2.033,2.439,4.637,2.439,8.094C107.203,27.763,106.713,30.366,104.762,32.399z
16
- M101.629,18.613c-0.773-0.773-1.83-1.181-3.051-1.181c-1.219,0-2.236,0.406-3.01,1.181c-1.26,1.261-1.422,3.416-1.422,5.652
17
- s0.162,4.393,1.422,5.653c0.773,0.771,1.791,1.22,3.01,1.22c1.221,0,2.277-0.447,3.051-1.22c1.262-1.262,1.424-3.417,1.424-5.653
18
- S102.891,19.873,101.629,18.613z"/>
19
- <path fill="#0095D3" d="M123.643,34.596V22.029c0-3.214-1.83-4.597-4.147-4.597s-4.271,1.423-4.271,4.597v12.566h-4.147v-20.62
20
- h4.065v2.074c1.425-1.546,3.416-2.318,5.49-2.318c2.115,0,3.865,0.691,5.084,1.871c1.586,1.545,2.074,3.497,2.074,5.815v13.178
21
- L123.643,34.596L123.643,34.596z"/>
22
- <path fill="#0095D3" d="M135.772,25.486c0,3.537,1.871,5.774,5.246,5.774c2.317,0,3.539-0.649,5.004-2.115l2.643,2.481
23
- c-2.115,2.114-4.107,3.213-7.727,3.213c-5.166,0-9.273-2.725-9.273-10.574c0-6.671,3.457-10.534,8.744-10.534
24
- c5.531,0,8.744,4.067,8.744,9.925v1.83H135.772z M144.475,19.791c-0.65-1.545-2.113-2.604-4.066-2.604
25
- c-1.951,0-3.457,1.059-4.107,2.604c-0.406,0.936-0.488,1.546-0.529,2.807h9.273C145.003,21.337,144.883,20.726,144.475,19.791z"/>
26
- <circle fill="#0095D3" cx="17.815" cy="11.516" r="4.402"/>
27
- <path fill="#0095D3" d="M31.167,20.311c0,2.433-1.969,4.401-4.403,4.401c-2.427,0-4.401-1.97-4.401-4.401
28
- c0-2.433,1.975-4.401,4.401-4.401C29.2,15.909,31.167,17.879,31.167,20.311z"/>
29
- <circle fill="#0095D3" cx="17.801" cy="29.131" r="4.402"/>
30
- <g>
31
- <path fill="#0095D3" d="M20.441-0.045C9.207-0.044,0.1,9.063,0.099,20.298C0.1,31.532,9.207,40.639,20.441,40.641
32
- c11.235-0.002,20.341-9.107,20.343-20.343C40.783,9.063,31.677-0.044,20.441-0.045z M31.891,31.747
33
- c-2.937,2.934-6.972,4.742-11.45,4.743c-4.478-0.001-8.513-1.811-11.45-4.743C6.058,28.81,4.25,24.775,4.249,20.298
34
- c0.001-4.478,1.809-8.513,4.743-11.45c2.937-2.934,6.972-4.742,11.45-4.743c4.478,0.001,8.513,1.81,11.45,4.743
35
- c2.934,2.938,4.742,6.973,4.743,11.45C36.633,24.775,34.825,28.81,31.891,31.747z"/>
36
- </g>
37
- <g>
38
- <path fill="#0095D3" d="M153.985,9.95c-1.195,0-2.164,0.971-2.164,2.168c0.002,1.197,0.969,2.168,2.164,2.168
39
- c1.199,0,2.172-0.971,2.172-2.168S155.184,9.95,153.985,9.95z M153.985,13.968c-1.021-0.002-1.846-0.827-1.846-1.85
40
- c0.002-1.021,0.825-1.849,1.846-1.851c1.023,0.002,1.852,0.828,1.854,1.851C155.836,13.141,155.008,13.966,153.985,13.968z"/>
41
- </g>
42
- <g>
43
- <path fill="#0095D3" d="M154.507,13.409l-0.54-1.08h-0.486v1.08h-0.389v-2.564h0.994c0.484,0,0.796,0.313,0.796,0.75
44
- c0,0.367-0.224,0.602-0.513,0.68l0.592,1.136L154.507,13.409L154.507,13.409z M154.056,11.195h-0.575v0.803h0.575
45
- c0.261,0,0.437-0.147,0.437-0.399S154.317,11.195,154.056,11.195z"/>
46
- </g>
47
- </g>
48
- </svg>
package/.vale.ini DELETED
@@ -1,10 +0,0 @@
1
- StylesPath = styles
2
-
3
- MinAlertLevel = suggestion
4
-
5
- Vocab = Base,Plone
6
-
7
- Packages = Microsoft
8
-
9
- [*.md]
10
- BasedOnStyles = Vale, Microsoft
package/.yarnrc.yml DELETED
@@ -1,5 +0,0 @@
1
- defaultSemverRangePrefix: ""
2
-
3
- nodeLinker: node-modules
4
-
5
- yarnPath: .yarn/releases/yarn-3.2.3.cjs
package/jsdoc.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "tags": {
3
- "allowUnknownTags": true
4
- },
5
- "source": {
6
- "include": ["./src"],
7
- "includePattern": ".+\\.js$",
8
- "excludePattern": ".+\\.(spec|e2e)\\.js$"
9
- },
10
- "opts": {
11
- "encoding": "utf8",
12
- "destination": "jsdoc",
13
- "recurse": true,
14
- "verbose": true
15
- }
16
- }
package/netlify.toml DELETED
@@ -1,5 +0,0 @@
1
- [build.environment]
2
- PYTHON_VERSION = "3.8"
3
- NODE_VERSION = "16.17.1"
4
- [build]
5
- ignore = "git diff --quiet $CACHED_COMMIT_REF $COMMIT_REF ./docs/"
package/pyvenv.cfg DELETED
@@ -1,3 +0,0 @@
1
- home = /opt/homebrew/opt/python@3.9/bin
2
- include-system-site-packages = false
3
- version = 3.9.16
@@ -1,225 +0,0 @@
1
- .Dd May 18, 2004
2
- .\" ttx is not specific to any OS, but contrary to what groff_mdoc(7)
3
- .\" seems to imply, entirely omitting the .Os macro causes 'BSD' to
4
- .\" be used, so I give a zero-width space as its argument.
5
- .Os \&
6
- .\" The "FontTools Manual" argument apparently has no effect in
7
- .\" groff 1.18.1. I think it is a bug in the -mdoc groff package.
8
- .Dt TTX 1 "FontTools Manual"
9
- .Sh NAME
10
- .Nm ttx
11
- .Nd tool for manipulating TrueType and OpenType fonts
12
- .Sh SYNOPSIS
13
- .Nm
14
- .Bk
15
- .Op Ar option ...
16
- .Ek
17
- .Bk
18
- .Ar file ...
19
- .Ek
20
- .Sh DESCRIPTION
21
- .Nm
22
- is a tool for manipulating TrueType and OpenType fonts. It can convert
23
- TrueType and OpenType fonts to and from an
24
- .Tn XML Ns -based format called
25
- .Tn TTX .
26
- .Tn TTX
27
- files have a
28
- .Ql .ttx
29
- extension.
30
- .Pp
31
- For each
32
- .Ar file
33
- argument it is given,
34
- .Nm
35
- detects whether it is a
36
- .Ql .ttf ,
37
- .Ql .otf
38
- or
39
- .Ql .ttx
40
- file and acts accordingly: if it is a
41
- .Ql .ttf
42
- or
43
- .Ql .otf
44
- file, it generates a
45
- .Ql .ttx
46
- file; if it is a
47
- .Ql .ttx
48
- file, it generates a
49
- .Ql .ttf
50
- or
51
- .Ql .otf
52
- file.
53
- .Pp
54
- By default, every output file is created in the same directory as the
55
- corresponding input file and with the same name except for the
56
- extension, which is substituted appropriately.
57
- .Nm
58
- never overwrites existing files; if necessary, it appends a suffix to
59
- the output file name before the extension, as in
60
- .Pa Arial#1.ttf .
61
- .Ss "General options"
62
- .Bl -tag -width ".Fl t Ar table"
63
- .It Fl h
64
- Display usage information.
65
- .It Fl d Ar dir
66
- Write the output files to directory
67
- .Ar dir
68
- instead of writing every output file to the same directory as the
69
- corresponding input file.
70
- .It Fl o Ar file
71
- Write the output to
72
- .Ar file
73
- instead of writing it to the same directory as the
74
- corresponding input file.
75
- .It Fl v
76
- Be verbose. Write more messages to the standard output describing what
77
- is being done.
78
- .It Fl a
79
- Allow virtual glyphs ID's on compile or decompile.
80
- .El
81
- .Ss "Dump options"
82
- The following options control the process of dumping font files
83
- (TrueType or OpenType) to
84
- .Tn TTX
85
- files.
86
- .Bl -tag -width ".Fl t Ar table"
87
- .It Fl l
88
- List table information. Instead of dumping the font to a
89
- .Tn TTX
90
- file, display minimal information about each table.
91
- .It Fl t Ar table
92
- Dump table
93
- .Ar table .
94
- This option may be given multiple times to dump several tables at
95
- once. When not specified, all tables are dumped.
96
- .It Fl x Ar table
97
- Exclude table
98
- .Ar table
99
- from the list of tables to dump. This option may be given multiple
100
- times to exclude several tables from the dump. The
101
- .Fl t
102
- and
103
- .Fl x
104
- options are mutually exclusive.
105
- .It Fl s
106
- Split tables. Dump each table to a separate
107
- .Tn TTX
108
- file and write (under the name that would have been used for the output
109
- file if the
110
- .Fl s
111
- option had not been given) one small
112
- .Tn TTX
113
- file containing references to the individual table dump files. This
114
- file can be used as input to
115
- .Nm
116
- as long as the referenced files can be found in the same directory.
117
- .It Fl i
118
- .\" XXX: I suppose OpenType programs (exist and) are also affected.
119
- Don't disassemble TrueType instructions. When this option is specified,
120
- all TrueType programs (glyph programs, the font program and the
121
- pre-program) are written to the
122
- .Tn TTX
123
- file as hexadecimal data instead of
124
- assembly. This saves some time and results in smaller
125
- .Tn TTX
126
- files.
127
- .It Fl y Ar n
128
- When decompiling a TrueType Collection (TTC) file,
129
- decompile font number
130
- .Ar n ,
131
- starting from 0.
132
- .El
133
- .Ss "Compilation options"
134
- The following options control the process of compiling
135
- .Tn TTX
136
- files into font files (TrueType or OpenType):
137
- .Bl -tag -width ".Fl t Ar table"
138
- .It Fl m Ar fontfile
139
- Merge the input
140
- .Tn TTX
141
- file
142
- .Ar file
143
- with
144
- .Ar fontfile .
145
- No more than one
146
- .Ar file
147
- argument can be specified when this option is used.
148
- .It Fl b
149
- Don't recalculate glyph bounding boxes. Use the values in the
150
- .Tn TTX
151
- file as is.
152
- .El
153
- .Sh "THE TTX FILE FORMAT"
154
- You can find some information about the
155
- .Tn TTX
156
- file format in
157
- .Pa documentation.html .
158
- In particular, you will find in that file the list of tables understood by
159
- .Nm
160
- and the relations between TrueType GlyphIDs and the glyph names used in
161
- .Tn TTX
162
- files.
163
- .Sh EXAMPLES
164
- In the following examples, all files are read from and written to the
165
- current directory. Additionally, the name given for the output file
166
- assumes in every case that it did not exist before
167
- .Nm
168
- was invoked.
169
- .Pp
170
- Dump the TrueType font contained in
171
- .Pa FreeSans.ttf
172
- to
173
- .Pa FreeSans.ttx :
174
- .Pp
175
- .Dl ttx FreeSans.ttf
176
- .Pp
177
- Compile
178
- .Pa MyFont.ttx
179
- into a TrueType or OpenType font file:
180
- .Pp
181
- .Dl ttx MyFont.ttx
182
- .Pp
183
- List the tables in
184
- .Pa FreeSans.ttf
185
- along with some information:
186
- .Pp
187
- .Dl ttx -l FreeSans.ttf
188
- .Pp
189
- Dump the
190
- .Sq cmap
191
- table from
192
- .Pa FreeSans.ttf
193
- to
194
- .Pa FreeSans.ttx :
195
- .Pp
196
- .Dl ttx -t cmap FreeSans.ttf
197
- .Sh NOTES
198
- On MS\-Windows and MacOS,
199
- .Nm
200
- is available as a graphical application to which files can be dropped.
201
- .Sh SEE ALSO
202
- .Pa documentation.html
203
- .Pp
204
- .Xr fontforge 1 ,
205
- .Xr ftinfo 1 ,
206
- .Xr gfontview 1 ,
207
- .Xr xmbdfed 1 ,
208
- .Xr Font::TTF 3pm
209
- .Sh AUTHORS
210
- .Nm
211
- was written by
212
- .An -nosplit
213
- .An "Just van Rossum" Aq just@letterror.com .
214
- .Pp
215
- This manual page was written by
216
- .An "Florent Rougon" Aq f.rougon@free.fr
217
- for the Debian GNU/Linux system based on the existing FontTools
218
- documentation. It may be freely used, modified and distributed without
219
- restrictions.
220
- .\" For Emacs:
221
- .\" Local Variables:
222
- .\" fill-column: 72
223
- .\" sentence-end: "[.?!][]\"')}]*\\($\\| $\\| \\| \\)[ \n]*"
224
- .\" sentence-end-double-space: t
225
- .\" End: