#pragma once
#include "LlUtils_global.h"
#include "Defines.h"
// 关于上标下标的说明
// 主要是单位上标下标,后续可以考虑数值,比如 1e-10d等
// 处理方式:
// (1) 直接在绘图中进行处理,比如坐标轴的刻度(对数坐标里面)
// (2) 改为html代码,增加sub或sup布局方式,QLabel与QTextEdit有些许区别
// (3) 利用UnitCode编码来进行,通常针对数字来进行,个别情况下对字母,注意:需要查表
// 目前整体采用第(3)种方式来进行
class I_UTILSSHARED_EXPORT ZxSupSubHelper
{
public:
ZxSupSubHelper();
~ZxSupSubHelper();
// 对于富文本转换,显示为QLabel和QTextBox是有些区别的,故此处区分一下
// enum RichHtmlMode
// {
// RHM_Label = 0, // 0-QLabel直接调用
// RHM_TextEdit, // 1:QTextEdit直接调用
// RHM_Unknown // 其它(TODO)
// };
/// @brief 检测是否含有需要富文本转换的内容,如果有,则转换
/// @param src 源文本,如 m^3/m^3
/// @param dest 编码结果文本,比如^转为上标
/// @param tag 判断表示,通常是^ 后续支持e
/// @param super 变为上标还是下标,默认上标
/// @param sslen sub/sup 长度,如果为-1则自动按照数字来取,否则,按sslen取
/// @return true:是,且正确转换,false:其他
static bool checkRichText(QString src, QString& dest, \
QString tag = "^", bool super = true, \
int sslen = -1);
/// @brief 把转换后的上下标字符串,再次进行调整,以能够以html的样式显示在QLabel中
/// @param src 源文本,如 m³/d
/// @param dest 目标文本,如 m3/d
/// @param super 变为上标还是下标,默认上标
/// @return true:是,且正确转换,false:其他
/// @note 权宜之计的说明,后续有时间再进行优化完善——
// 即:上述上标模式转换,大多数情况下没有问题,但是对于QLabel的显示出了问题,无法正常显示。
// 比如插入流量点对话框中,"10^4m^3/d",m^3可以正确显示,但是^4无法正确显示
// 经测试,应该是转换的码,不支持。(1,2,3,转为的0x00..,而其它转为的是0x20..)
// 但是为了保持整体接口的统一(所有地方都能适用),所以针对QLabel,增加如下接口,以便把转换后的
// 上下标字符串,能够以html的样式显示在QLabel中。
// m³/d 变为:m3/d
static bool convertRichText4Label(QString src, QString& dest, \
bool super = true);
private:
// 内部编码查找函数
static QString _getRichCodesOfStrs(QString s, bool super);
static QString _getRichCodeOfChar(QChar ch, bool super);
static QString _getCharOfPossibleRichCode(QChar ch, bool super);
// 目前暂时支持14种字符上下标,后续根据需要可以进行扩展
// ss_ 标识:SupSub
static const int ss_size = 14;
static const int ss_chars[14];
static const int ss_digitsSup[14];
static const int ss_digitsSub[14];
};