Выполнение диалогового окна: исправление ответа Chatbot

Некоторые шрифты используют разные ширины символов для разных символов. В таких шрифтах «m» будет иметь большую ширину, чем «i». Они называются пропорциональными шрифтами. Эти шрифты имеют приятный вид и их легче читать.

Шрифты, где все символы имеют одинаковую ширину, называются моноширинными шрифтами. Они часто используются для исходного кода, поскольку они позволяют выравнивать функции, такие как комментарии к строке справа от кода.

Использовать моноширинный шрифт!

Вот код, который я использую для получения списка всех установленных моноширинных шрифтов:

using System;
using System.Drawing;
using System.Runtime.InteropServices;

namespace PE.Rendering {

    static class FontHelper {

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        class LOGFONT {
            public int lfHeight;
            public int lfWidth;
            public int lfEscapement;
            public int lfOrientation;
            public int lfWeight;
            public byte lfItalic;
            public byte lfUnderline;
            public byte lfStrikeOut;
            public byte lfCharSet;
            public byte lfOutPrecision;
            public byte lfClipPrecision;
            public byte lfQuality;
            public byte lfPitchAndFamily;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
            public string lfFaceName;
        }

        static bool IsMonospaced(Graphics g, Font f)
        {
            float w1, w2;

                w1 = g.MeasureString("i", f).Width;
                w2 = g.MeasureString("W", f).Width;
                return w1 == w2;
        }

        static bool IsSymbolFont(Font font)
        {
            const byte SYMBOL_FONT = 2;

            LOGFONT logicalFont = new LOGFONT();
            font.ToLogFont(logicalFont);
            return logicalFont.lfCharSet == SYMBOL_FONT;
        }

        /// <summary>
        /// Tells us, if a font is suitable for displaying document.
        /// </summary>
        /// <remarks>Some symbol fonts do not identify themselves as such.</remarks>
        /// <param name="fontName"></param>
        /// <returns></returns>
        static bool IsSuitableFont(string fontName)
        {
            return !fontName.StartsWith("ESRI") && !fontName.StartsWith("Oc_");
        }

        public static List<string> GetMonospacedFontNames()
        {
            List<string> fontList = new List<string>();
            InstalledFontCollection ifc;

            ifc = new InstalledFontCollection();
            using (Bitmap bmp = new Bitmap(1, 1)) {
                using (Graphics g = Graphics.FromImage(bmp)) {
                    foreach (FontFamily ff in ifc.Families) {
                        if (ff.IsStyleAvailable(FontStyle.Regular) && ff.IsStyleAvailable(FontStyle.Bold) 
                            && ff.IsStyleAvailable(FontStyle.Italic) && IsSuitableFont( ff.Name)) {
                            using (Font f = new Font(ff, 10)) {
                                if (IsMonospaced(g,f) && !IsSymbolFont(f)) {
                                    fontList.Add(ff.Name);
                                }
                            }
                        }
                    }
                }
            }
            return fontList;
        }
    }

}
-1
задан Dhananjay Shitkar 18 January 2019 в 13:25
поделиться

1 ответ

Проблема в том, что вы используете библиотеку actions-on-google для отправки информации обратно, но ваше Android-приложение не является Action. Поэтому он читает стандартные поля Dialogflow из ответа, а не просматривает раздел «google».

В общем, если вы планируете разрабатывать для платформ, отличных от Assistant, вам следует использовать библиотеку dialogflow-executement , а не actions-on-google, поскольку она позволяет указывать пользовательские полезные нагрузки для вашей платформы.

0
ответ дан Prisoner 18 January 2019 в 13:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: