详细说明: - 基于文旅订单班框架复制创建food-order-demo项目 - 修改端口配置为4174避免冲突 - 更新LandingPage为青莳轻食主题(绿色健康风格) - 重新定义7个食品行业专业Agent: * 市场研究专家:轻食市场分析、客群画像 * 营养配方师:营养成分配比、低卡高蛋白设计 * 供应链管理专家:有机食材供应、溯源体系 * 品牌策划师:品牌定位、店铺空间布局 * 财务分析师:投资预算、ROI分析 * 运营管理专家:运营流程、品控标准 * 食品创业导师:中央协调、方案整合 - 创建专用启动脚本start.sh - 验证系统可正常运行在端口4174 - 实现代码复用率90%,符合预期目标 影响文件: web_frontend/food-order-demo/ 技术栈: React 18 + TypeScript + Tailwind CSS + Zustand
187 lines
4.6 KiB
JavaScript
187 lines
4.6 KiB
JavaScript
Prism.languages.markup = {
|
|
'comment': {
|
|
pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
|
|
greedy: true
|
|
},
|
|
'prolog': {
|
|
pattern: /<\?[\s\S]+?\?>/,
|
|
greedy: true
|
|
},
|
|
'doctype': {
|
|
// https://www.w3.org/TR/xml/#NT-doctypedecl
|
|
pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
|
|
greedy: true,
|
|
inside: {
|
|
'internal-subset': {
|
|
pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
|
|
lookbehind: true,
|
|
greedy: true,
|
|
inside: null // see below
|
|
},
|
|
'string': {
|
|
pattern: /"[^"]*"|'[^']*'/,
|
|
greedy: true
|
|
},
|
|
'punctuation': /^<!|>$|[[\]]/,
|
|
'doctype-tag': /^DOCTYPE/i,
|
|
'name': /[^\s<>'"]+/
|
|
}
|
|
},
|
|
'cdata': {
|
|
pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
|
|
greedy: true
|
|
},
|
|
'tag': {
|
|
pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
|
|
greedy: true,
|
|
inside: {
|
|
'tag': {
|
|
pattern: /^<\/?[^\s>\/]+/,
|
|
inside: {
|
|
'punctuation': /^<\/?/,
|
|
'namespace': /^[^\s>\/:]+:/
|
|
}
|
|
},
|
|
'special-attr': [],
|
|
'attr-value': {
|
|
pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
|
|
inside: {
|
|
'punctuation': [
|
|
{
|
|
pattern: /^=/,
|
|
alias: 'attr-equals'
|
|
},
|
|
{
|
|
pattern: /^(\s*)["']|["']$/,
|
|
lookbehind: true
|
|
}
|
|
]
|
|
}
|
|
},
|
|
'punctuation': /\/?>/,
|
|
'attr-name': {
|
|
pattern: /[^\s>\/]+/,
|
|
inside: {
|
|
'namespace': /^[^\s>\/:]+:/
|
|
}
|
|
}
|
|
|
|
}
|
|
},
|
|
'entity': [
|
|
{
|
|
pattern: /&[\da-z]{1,8};/i,
|
|
alias: 'named-entity'
|
|
},
|
|
/&#x?[\da-f]{1,8};/i
|
|
]
|
|
};
|
|
|
|
Prism.languages.markup['tag'].inside['attr-value'].inside['entity'] =
|
|
Prism.languages.markup['entity'];
|
|
Prism.languages.markup['doctype'].inside['internal-subset'].inside = Prism.languages.markup;
|
|
|
|
// Plugin to make entity title show the real entity, idea by Roman Komarov
|
|
Prism.hooks.add('wrap', function (env) {
|
|
|
|
if (env.type === 'entity') {
|
|
env.attributes['title'] = env.content.replace(/&/, '&');
|
|
}
|
|
});
|
|
|
|
Object.defineProperty(Prism.languages.markup.tag, 'addInlined', {
|
|
/**
|
|
* Adds an inlined language to markup.
|
|
*
|
|
* An example of an inlined language is CSS with `<style>` tags.
|
|
*
|
|
* @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
|
|
* case insensitive.
|
|
* @param {string} lang The language key.
|
|
* @example
|
|
* addInlined('style', 'css');
|
|
*/
|
|
value: function addInlined(tagName, lang) {
|
|
var includedCdataInside = {};
|
|
includedCdataInside['language-' + lang] = {
|
|
pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
|
|
lookbehind: true,
|
|
inside: Prism.languages[lang]
|
|
};
|
|
includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
|
|
|
|
var inside = {
|
|
'included-cdata': {
|
|
pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
|
|
inside: includedCdataInside
|
|
}
|
|
};
|
|
inside['language-' + lang] = {
|
|
pattern: /[\s\S]+/,
|
|
inside: Prism.languages[lang]
|
|
};
|
|
|
|
var def = {};
|
|
def[tagName] = {
|
|
pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () { return tagName; }), 'i'),
|
|
lookbehind: true,
|
|
greedy: true,
|
|
inside: inside
|
|
};
|
|
|
|
Prism.languages.insertBefore('markup', 'cdata', def);
|
|
}
|
|
});
|
|
Object.defineProperty(Prism.languages.markup.tag, 'addAttribute', {
|
|
/**
|
|
* Adds an pattern to highlight languages embedded in HTML attributes.
|
|
*
|
|
* An example of an inlined language is CSS with `style` attributes.
|
|
*
|
|
* @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as
|
|
* case insensitive.
|
|
* @param {string} lang The language key.
|
|
* @example
|
|
* addAttribute('style', 'css');
|
|
*/
|
|
value: function (attrName, lang) {
|
|
Prism.languages.markup.tag.inside['special-attr'].push({
|
|
pattern: RegExp(
|
|
/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,
|
|
'i'
|
|
),
|
|
lookbehind: true,
|
|
inside: {
|
|
'attr-name': /^[^\s=]+/,
|
|
'attr-value': {
|
|
pattern: /=[\s\S]+/,
|
|
inside: {
|
|
'value': {
|
|
pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
|
|
lookbehind: true,
|
|
alias: [lang, 'language-' + lang],
|
|
inside: Prism.languages[lang]
|
|
},
|
|
'punctuation': [
|
|
{
|
|
pattern: /^=/,
|
|
alias: 'attr-equals'
|
|
},
|
|
/"|'/
|
|
]
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
|
|
Prism.languages.html = Prism.languages.markup;
|
|
Prism.languages.mathml = Prism.languages.markup;
|
|
Prism.languages.svg = Prism.languages.markup;
|
|
|
|
Prism.languages.xml = Prism.languages.extend('markup', {});
|
|
Prism.languages.ssml = Prism.languages.xml;
|
|
Prism.languages.atom = Prism.languages.xml;
|
|
Prism.languages.rss = Prism.languages.xml;
|