
    -j                     ,   d Z ddlZddlZddlZddlZddlmZ d Z eej                  dk    rej        d         n	 e            Z	e	s" e
dej                    ej        d           de	 d	Z ej        d
          Ze                    d            ej        e                              d          Ze                                ZdZg Zg Z ee          D ]\  ZZ ej        de          Zer-edk     r'e                    d                                          Ze                                                    d          rLe                     e                                !                    d                                                     e                                dk    redz   Z"e" ee          k     ree"                                                             d          s ej        dee"                                                   Z#e#r:e                     e#                    d                                                     e"dz  Z"e" ee          k     r-ee"                                                             d           nd Z$dxZ%xZ&xZ'xZ(xZ)xZ*xZ+xZ,xZ-Z.eD ]tZ/de/v rU ej0        de/          Zere                    d          ndZ% e$e/d          pdZ& e$e/d          pdZ' e$e/d          pdZ(\de/v r ej0        de/          Zere                    d          ndZ) ej0        de/          Zere                    d          ndZ* ej0        d e/          Zere                    d          ndZ+ ej0        d!e/          Zere                    d          ndZ,
d"e/v rf ej0        d#e/          Zer'e                    d                                          ndZ- ej0        d$e/          Zere                    d          ndZ.ve	dd%          d& e1e	d%d'                    d( e1e	d'd                    d)Z2d*d+d,d-d.d/d0d1Z3e34                     ej5        e	d2          6                    d3          d          Z7g Z8dZ9eD ]
Z ej        d4e                                          Zerwe9re8                     e9            e1e                    d                    e                    d5                                          pd6e                    d           g d7Z9e9;e                                                    d          se                                se9d8                              e                                           e9re8                     e9           d9 Z: ej;        d:          Z< ej;        d;          Z=d< Z>d= Z?d> Z@d? ZAd@ ZBdA ZCddCZDddDZEdE ZFdF ZGdG ZHdH ZIddIZJdJ ZKddLZLdMdNdOdPdQdRdSdTdUdVdWdXdYZMdZ ZNd[ ZOdZPePd\e& d]e% d^z  ZPePd_e' d`e% daz  ZPePdbe( dcz  ZPePdde) dez  ZPePd_e* dfz  ZPe,re,ndgZQePdheQ diz  ZPePdde+ djz  ZPePdbe. dke- dlz  ZPdZRerYg ZS eed          D ]0\  ZTZU ej        dmeU          ZerN ee                    d5                    d%k    r,e                    d          e                    d5          cZVZWn	dneTdoeUcZVZWeWX                    dp          ZY eeY          d5k    r<dpZ                    eYdd                   dpZ                    eYdd                   cZ[Z\neWdcZ[Z\ e@e[          Z]e\rdq e@e\           drndZ^dseUv reTd%k    rdtndZ_eS                     due_ dveTdodw e@eV           dxe] dre^ dl           2dydZ                    eS           dzZRg Z`e8D ]vZa ebd{ eMc                                D             d|          Zd eNea          \  ZeZfead}         dz   doZge`                     d~eg dead}          dead          ded dlee d           wdZh ej        eh          i                                r$ ej        eh                              d          ndZjdZke	dd%          de	d%d'          de	d'd          Zlekm                    elejde%e-e2e7ePeRdZ                    e`          
  
        Znede	 dz  Zoeop                    end            e ejq        deejr                            Zsent                    d          ent                    d          z   ent                    d          z   ent                    d          z    e ejq        den                    z   Zueseuk    r e
des deu dej                    e
deo deov                                jw         de% d ee`           des deu            dS )u  复盘报告 md → 0813 手工定制版式 HTML (组件化渲染)
用法: python3 build_html.py [YYYYMMDD]   # 缺省取最新 report_*.md
版式基线: report_20260813.html (用户确认版) —— masthead / kpi / digest / sec-head /
          col-card 双栏 / ladder 梯队 / themes 主题条 / flow 资金卡 / cube 因果 /
          plan3 计划三列 / pull-quote / tbl-box 表格 / warn / ok
    N)datetimec                      t          j        d          } fd|                     d          D             }|rt          |          nd S )Nz4/root/.hermes/skills/qianxiaodou-engine/data/reportsc                 r    g | ]3}t          j        d |j                  x                    d          4S )zreport_(\d{8})\.md$   )rematchnamegroup).0fms     build_html.py
<listcomp>zlatest_date.<locals>.<listcomp>   sR     A A AAh5qv>>>AQWWQZZ A A A    zreport_*.md)pathlibPathglobmax)ddatesr   s     @r   latest_dater      sb    KLLAA A A A!6!6 A A AE(3u:::D(r   r   zno report found)filez</root/.hermes/skills/qianxiaodou-engine/data/reports/report_z.mdz/root/web_reportsT)exist_okzutf-8)encodingu   市场复盘z
^#\s+(.*)$   >u   复盘摘要:z---z^\d+\.\s+(.*)$c                     t          j        |dz   |           }|r'|                    d                                          ndS )Nu   \s*[:：]\s*(半仓|空仓|满仓|轻仓|清仓|[0-9.]+-[0-9.]+成|[0-9.]+成|[0-9.]+/[0-9.]+|[0-9.]+%?|[一二三四五六七八九十])r    )r   searchr
   strip)segkeyr   s      r   find_kvr#   -   sP    
	#  e  e  gj  	k  	kA!"*1771::*r   r   u   行情:u   行情[:：]\s*([^\s|]+)u   综合评分u	   恐慌度u   仓位上限u   涨停u   涨停\s*(\d+)u   跌停\s*(\d+)u   涨跌比\s*([\d:]+)u   成交\s*([\d.]+)\s*亿   主线u   主线[:：]\s*([^|]+)u   最高\s*(\d+)板   u   年   u   月u   日u	   星期一u	   星期二u	   星期三u	   星期四u	   星期五u	   星期六u	   星期日)MondayTuesday	WednesdayThursdayFridaySaturdaySundayz%Y%m%dz%Au#   ^##\s+模块\s*(\d+)[:：]?\s*(.*)$   u   模块)numtitleblocksr1   c                    d}|t          |           k     rN| |                             d          s3|dz  }|t          |           k     r| |                             d          3d | |                             d                              d          D             }g }| |dz   d         D ]^}|                    d          s nF|                    d |                    d                              d          D                        _||fS )u0   markdown 表格 → {header:[...], rows:[[...]]}r   |r   c                 6    g | ]}|                                 S  r    r   cs     r   r   zparse_table.<locals>.<listcomp>[   s     
C
C
C17799
C
C
Cr   r.   Nc                 6    g | ]}|                                 S r5   r6   r7   s     r   r   zparse_table.<locals>.<listcomp>`   s     AAA1QWWYYAAAr   )len
startswithr    splitappend)block_linesihdrrowslns        r   parse_tablerC   V   s   	A
c+

{1~'@'@'E'E
	Q c+

{1~'@'@'E'E

C
Ck!n22377==cBB
C
C
CCD!A#$$ C C}}S!! 	EAA(;(;C(@(@AAABBBB9r   uL   (?<![\d\-−])([+\-−＋]?\d+(?:[.,]\d+)?(?:万亿|%|亿|万|成|只|家)?)z^\d{6}$c                 
   | s| S t                               |                                           r| S | d         dv }| d         dv }|r
| dd         n| }|rd|rdnd d	|  d
S d|v s|                    d          rd|  d
S | S )uY   对单个 token 上色: ±%/±亿/±万 → up红/down绿; 正数%或带单位 → num金r      -−u   +-−＋r   N
<b class="downup"></b>%)u   亿u   万u   成u   只u   家<b class="num">)_CODEr   r    endswith)tneghas_signbodys       r   
_shade_numrS   g   s     {{17799 
A$&.Ctz!H#1QRR55!D ?>c3FFt>>q>>>>
d{{dmm$GHH{(((((Hr   c                    d }t          j        d|           }t          dt          |          d          D ]9}|t          |          k     r$t                              |||                   ||<   :d                    |          S )uE   对已转义 html 中的裸数字 token 上色(不碰标签内文本)c                 F    t          |                     d                    S Nr   )rS   r
   r   s    r   _repzshade_bare.<locals>._repx   s    !''!**%%%r   z	(<[^>]+>)r   r.   r   )r   r<   ranger:   	_BARE_NUMsubjoin)	text_htmlrX   partsr?   s       r   
shade_barer_   v   s    & & & H\9--E1c%jj!$$ 5 5s5zz>> }}T5844E!H775>>r   c                    t          j         |                                           }t          j        dd|t          j                  }d t          j        dfd|          }t          j        dfd|          }t          |          S )	uZ   md 行内 → html; **数字** → num 金; **+x%/-x%** → up/down; 裸数字自动着色<p>(.*)</p>\1flagsc                     |                      d          }t          j        d|          r"|                    d          rdnd}d| d| dS t          j        d	|          rd
| dS d| dS )Nr      ^[+\-−][\d.]+%?$)+u   ＋rH   rG   rF   rI   rJ   z^[\d][\d.,]*%?$rL   <b>)r
   r   r   r;   )r   rO   clss      r   _numzinline.<locals>._num   s    GGAJJ8)1-- 	/,,|44@$$&C...q....8&** 	-,Q,,,,Q}}}r   z<strong>(.*?)</strong>c                 f     t          j        d|                     d                              S )Nz(.*)r   )r   r   r
   r   rj   s    r   <lambda>zinline.<locals>.<lambda>   s(    DD'177ST::9V9V4W4W r   <strong>([^<]*?)</strong>c                      |           S Nr5   rl   s    r   rm   zinline.<locals>.<lambda>   s    ttAww r   )markdownr    r   r[   Sr_   )texthrj   s     @r   inlineru      s    $%%''A
~uart444A   	(*W*W*W*WYZ[[A
+->->->->BBAa==r   c                     t          j        d|           }t          j        |                                           }t          j        dd|t           j                  }|S )u;   完整段落 → html; 开头 加粗标签 → <b>:text</b>u   ^\*\*(.+?)\*\*[:：]?(.*)$ra   rb   rc   )r   r   rq   r    r[   rr   )rs   r   rt   s      r   para_inlinerw      sO    
.55A$%%''A
~uart444AHr   c                     t          j        d|           rd| d         dv rdnd d|  dS t          j        d	|           rd
|  dS d|  dS )Nrf   rF   r      +＋rH   rG   rI   rJ   z^[\d][\d.,]*$rL   rh   )r   r   )rO   s    r   num_or_updownrz      su    	x%q)) JIAaDFNNDDII!IIII	x !$$ )(((((===r   c                     | S )uI   把 md 转换后 <strong>..</strong> 开头的段落, 拆成 <b>:lead</b>r5   )rt   s    r   html_lead_boldr|      s    Hr   Fc                    d                     d | D                       }g }t          |          D ]\\  }}|r|t          |          dz
  k    rdnd}	d                     d |D                       }
|                    d|	 d|
 d           ]|rd	| d
nd}|rd| dnd}|sdnd}d| d| d| d| dd                     |           dS )Nr   c              3   <   K   | ]}d t          |           dV  dS z<th>z</th>Nru   r7   s     r   	<genexpr>zcomp_tbl.<locals>.<genexpr>   s4      77a))))777777r   r   z style="background:#fbf7ee"c              3   <   K   | ]}d t          |           dV  dS )<td></td>Nr   r7   s     r   r   zcomp_tbl.<locals>.<genexpr>   s4      99!-VAYY---999999r   z<trr   </tr>z<div class="tbl-cap"></div>z style="min-width:zpx"ztbl-wrapzscroll-x<div class="rI   <tablez><tr></table></div>)r\   	enumerater:   r=   )r@   rA   caphl_last	min_widththstrsr_irri   tdscap_htmlstylewrap_clss                 r   comp_tblr      sI   
''773777
7
7C
CD// + +Q07YC3t99q=<P<P++WYgg99q99999

)))s)))****69A2s2222rH3<D/////"E!*:zz
H:8 : :x : :u : :: :WWS\\: : : ;r   c                 (    | rd|  | d| dS d| dS )N'<div class="cube"><div class="cb-head"></div><div class="cb-body"></div></div>z'<div class="cube"><div class="cb-body">r5   )	head_html	body_html
head_extras      r   	comp_cuber      sT     SR) RR R:CR R R 	SLYLLLLr   c                     d|  d| dS )Nz<div class="col-card">z<ol></ol></div>r5   )h4_html
items_htmls     r   comp_col_cardr      s    HGHHHHHHr   c                 j   | \  }}i }|D ]}t          |          dk     r|d                             dd                                          }	 t          |          }n# t          $ r Y aw xY w|                    |g                               |           |si }|D ]}t          |          dk     r|d                             dd                                          }|dk    rd}n!	 t          |          }n# t          $ r Y jw xY w|                    |g                               |           g }t          t          |d	                    D ]\  }	}g }
||         D ]u}|d         t          |          d
k    r|d
         nd}}|
                    dt          |           d           |r&|
                    dt          |           d           v|	dk    rdnd}|                    d| d| dd
                    |
           d           |rdd
                    |           dS g }t          t          |d	                    D ]E\  }	}g }
||         D ]}|d         t          |          d
k    r|d
         nd|d         t          |          dk    r|d         ndf\  }}}}|dv s|dk    r'|
                    dt          |           d           d|v rdnd}d|v rdnd|v rdn|                    dd          }|r
|dvrd | dnd}d!d|v rd"ndz   }|
                    d#| d$t          |           d%| d&| d$| d| d           |	dk    rdnd}|                    d| d| dd
                    |
           d           Gdd
                    |           dS )'ur   连板梯队: (板位, 标的, 代码, 形式, 封成比) → ladder; 兼容3列汇总(板位|数量|代表个股)r%   r   u   板r   r   u   首板r   T)reverser.   z<span class="chip dim"><b>u   只</b></span>z<span class="chip"></span>zlvl toplvlr   z%"><div class="badge"><span class="b">u:   </span><span class="t">板</span></div><div class="names">r   z<div class="ladder">r   -)r   u   53只</b></span>u   一hsealu   一字u   换u   换手)r   z<span class="rto">chipz yzz<span class="rI   z <span class="cd">z</span><span class="tag )r:   replacer    int
ValueError
setdefaultr=   r   sortedru   r\   )table_okr@   rA   groupsr   banr"   groups3out3bichipscntreplvl_clsoutnmcodeformratiotag_clstag	ratio_txtchip_clss                          r   comp_ladderr      s.   ICF - -q66A::dll5"%%++--	c((CC 	 	 	H	#r""))!,,,, @ 	2 	2A1vvzzA$,,ub))//11Chc((CC!   HsB''..q1111 !>!>!>?? 		l 		lGBES\ M MQ4#a&&1**!A$$"SU&++UUUVVV MLL!Kvc{{!K!K!KLLL#%77iiGKK kw k kUX k kNPggV[nnk k k l l l l 	@?"''$--????
CVFD999:: g gC 	X 	XA$%aD3q66A::1Q4431X[\]X^X^abXbXbPQRSPTPThj$k!BdE^##ts{{Q&**QQQRRR!&$ggBG#tmm((etmm((QUQ]Q]^cegQhQhC?DdV\I\I\;U;;;;bdI%4--R@HLL W W WVBZZ W W-1W W-4W W8;W WDMW W W X X X X  "Qww))E

 f' f fPS f fIKQVf f f 	g 	g 	g 	g6"''#,,6666s$   A
A,+A,.C>>
D
Dc                    | \  }}d}g }|D ]}t          |          dk     r	 t          t          j        d|d                                                             }n# t
          t          f$ r Y ew xY w|                    |d         |t          |          dk    r|d         ndf           t          ||          }g }t          t          |d                     D ]q\  }\  }	}}
t          ||z  dz            }|
rd	t          |
           d
nd}|dk    rdnd}|                    d| dt          |	           d| d| d| d           rdd                    |           dS )uA   主线识别: (主线, 涨停数, 代表标的) → themes 条形r   r.   z\d+r   r   c                     | d          S rV   r5   )xs    r   rm   zcomp_themes.<locals>.<lambda>  s    1Q4% r   )r"   d   z<span class="st">r   z theme leadz<div class="themez"><div class="tn">z</div><div class="cnt">z6</div><div class="trk"><div class="fill" style="width:z%"></div></div>r   z<div class="themes">)r:   r   r   r   r
   AttributeErrorr   r=   r   r   r   roundru   r\   )r   r@   rA   maxvcleanr   vr   i0r   r   wrep_htmllead_clss                 r   comp_themesr      s   ICDE  q66A::x	BIfad++113344AA
+ 	 	 	H	adAs1vvzzqttr:;;;4||
C%fU&H&H&HII D DLRC!d(S.!!?BJ;vc{{;;;;$&!GG==

 Cx C C6":: C C'(C C`aC CrzC C C 	D 	D 	D 	D6"''#,,6666s   :AA21A2c                    t          j        d|           }|r|                                nd}t          j        d|           }|r|                                nd}|dk    r<| d|                                         | |dz   d                                         }}n| d}}|dk    rC|dk    r=|d|                                         ||dz   d                                         }}ndt	          |          d	k    r|d}}nKt          j        d
|d          }	t	          |	          dk    rst          d |	dd         D                       dk     rN|	d         |	d         rd|	d         z   ndz   d                    |	dd                                                   }}nt	          |	          dk    rt	          |	d                   dk    rn|	d         t	          |	          dk    rd|	d         z   ndz   t	          |	          dk    r/d                    |	dd                                                   nd}}n|dd         |dd         }}|||fS )u@   新闻条目拆分: '事件 ... → 传导' 或 '标题: 内容'u   →u   [:：]r   Nr   r         u   [,，]r.   )maxsplitr   c              3   4   K   | ]}t          |          V  d S rp   )r:   )r   ps     r   r   zsplit_news.<locals>.<genexpr>   s(      &A&A!s1vv&A&A&A&A&A&Ar         ，,r&      )r   r   startr    r:   r<   sumr\   )
rs   rngarrow_icoloncolon_ileadconveymtmlr^   s
             r   
split_newsr     s\   
)FD
!
!C (ciikkkbGIi&&E$,ekkmmm"G{{HWH~++--tGAIJJ/?/E/E/G/GfRf{{w"}}hwh%%''gaijj)9)?)?)A)ABt99??2BB HYq999E5zzQ3&A&AuRaRy&A&A&A#A#AB#F#Fqq%IUU1X%5%5rJCHHUZ[\[][]U^L_L_LeLeLgLgBUqSq]]a%7%7qUaUU1X%5%5RPqtuzq{q{~qqRURZRZ[`abacac[dReReRkRkRmRmRm  FHBcrcDIBr6>r   c                    ddddddd                     |                                                     d                                          |          }|  d| d}g }|D ]}t          |          \  }}}	|rd| d	nd
}
g }|r(|                    dt          |           |
 d           |r&|                    dt          |           d           |	r&|                    dt          |	           d           |s&|                    dt          |           d           |                    dd
                    |           d           dt          |           dd
                    |           dS )u8   外围/内因 新闻卡: li = mt + ml (+ ml.sent 传导)OverseasDomesticzA-Shares)u   外围u   外盘u   内因u   内盘u   A股u   国内u	   ✧❖· z <b>rJ   z<em>z</em>r   z<div class="mt">r   z<div class="ml">z<div class="ml sent"><li></li>z<div class="col-card"><h4>z	</h4><ol>r   )getr    lstripr   r=   ru   r\   )h4_textitemsen_tagenr   lisitr   r   convemr^   s               r   render_news_cardr   (  s   *
V`

4 
447C8N8N{8[8[8a8a8c8cek4l4l &&b&&&G
C 	1 	1!"~~B%+3!F!!!!Fu||EvbzzE2EEEFFFBu||AvbzzAAABBBKJfTllJJJKKK 	@LL>F2JJ>>>???

/"''%..///0000[w[["''#,,[[[[r   c                    g }| D ]}|r|d         s|d                              dd                               dd          }|d         |d         }}d}t          j        dt          |          d	k    r|d	         nd          }|r*|                    d          }d
|d         dv rdnd d| d}|                    d| dt          |           d| d| d	           dd                    |           dS )u>   资金净流入: (类型, 方向, 金额, 备注) → flow 卡r      资金净流入u	   净流入#r   r.   r   u   当日([+\-−]?\d+\.\d+%)r   z<div class="chg ry   rH   rG   rI   r   z"<div class="card"><div class="rk">z</div><div class="nm">z</div><div class="amt">z<div class="flow">)r   r   r   r:   r
   r=   ru   r\   )	rA   cardsr   rkr   amtchgr   r   s	            r   render_flowr   :  sX   E A A&!&hqT\\+[99AA#sKKA$!CI3SVVaZZQqTTRPP 	U

ATQqTV^^TTTT1TTTC @" @ @(.r

@ @),@ @47@ @ @ 	A 	A 	A 	A 76666r      :：c           	         g }t          | d          D ]\  }}t          j        d| d|          }|rot          |                    d                    dk    rIdt          |                    d                     d}t          |                    d                    }ndt          |          }}|r|                    d	| d
| | d           |                    d| | d           dd                    |           dS )u&   列表 → cube li: 首冒号前加粗r   z^(.{2,24}?)[z](.*)$   rh   rJ   r.   r   z3<li><span class="num gold" style="font-weight:700">z	.</span> r   r   zR<div class="cube"><div class="cb-body"><ul style="list-style:none;padding-left:0"></ul></div></div>)r   r   r   r:   r
   ru   r=   r\   )	r   numberedsepr   r?   r   r   	lead_html	rest_htmls	            r   render_cube_listr	  K  s,   
C5!$$ 
; 
;2I3333R88 	2QWWQZZB&&6fQWWQZZ00666Iqwwqzz**II#%vbzzyI 	;JJtQttYbtdmtttuuuuJJ9i9999::::`b`g`ghk`l`lr   zCatalysts & AttributionzMarket State & 10-DayzLimit-Up & ThemeszCapital Flow & CausalityzDual-Track VerdictzAccuracy & IterationzNext-Day PlanzIndices & BreadthzSentiment & LadderzCapital FlowzTrade ReviewzTo Be Verified)u   消息面与驱动归因u   市场状态与近10日脉络u   涨停结构与主线真假u   资金行为与主线因果链u   双轨判断u   正确率验证与自我迭代u   明日交易计划u   指数与广度复盘u   情绪与连板梯队u	   资金面u   当日操作复盘u   待验证项c                 b/  =>?@ABC | d         }g =d}g ?g >d@g B>?@fd}=ABfd}d Ad }|t          |          k     r||         }t          j        d|          }|rJ |              |             |                    d	          @|d	z   }|t          |          k     r||                             d
          s||                             d          s||                             d          st          j        d||                   r/>                    t          j        dd||                              |d	z  }|t          |          k     rQ||                             d
          s6||                             d          s||                             d          |}~t          j        d|          }	|	r |              |             |	                    d	                                          }
|d	z   }g }|t          |          k     ri||                             d          sN|                    ||                    |d	z  }|t          |          k     r||                             d          N|} ||          }|
                    d          rg g g dCCfd} |d|           |
}|}|}dD ]k}|t          |          k     rNt          j        d||                   s3|d	z  }|t          |          k     rt          j        d||                   3|t          |          k    r nt          j        d||                   }|                    d	                                          }|                    |          r|d	z   }g }|t          |          k     ri||                             d          sN|                    ||                    |d	z  }|t          |          k     r||                             d          N || ||                     |}l |}dddd}g }CD ]K}d                    d C|         D                       pd}|                    d||          d| d           L=                    dd                    |           d             |             d!|
v sd"|
v sd#|
v rmt          d$ |D             d          }|rQ=                    d%t          |
           d&           =                    t          |d'di            |             t          j        d(|
          rAfd)} ||
|          g}|}|t          |          k     rt          j        d*||                   }|sn|                    d	                                          }|d	z   }g }|t          |          k     ri||                             d          sN|                    ||                    |d	z  }|t          |          k     r||                             d          N|                     || ||                               |}|t          |          k     |}t          |          d	k    r=                    |d                    n,=                    d+d                    |           d             |             |
                    d,          sd,|
k    rOd-                    d. |D                       } | r"=                    d/ A|            d             |             #d0|
v sd1|
v s	d2|
v sd3|
v r!t          d4 |D             d          }|r=                    d%t          |
           d&           |\  }!}"d5d                    |!          v rd6 }#d}$|"D ]Q}%d}&t          |%          D ]4\  }'}(|'d	k    r|&d7 |#|(           d8z  }&|&d9t          |(           d8z  }&5|$d:|& d;z  }$R=                    d<d                    d= |!D                        d;|$ d>           n#=                    t          |!|"                      |             Ud|
v s|
d?k    sd@|
v rt          dA |D             d          }=                    d%t          |
           d&           |r=                    t          |            n*g })|D ]}*|*d         dBk    r|)                    |*d	                    *|*d         dCk    rt          j        dD|*d	                   }+|+rht          |+                    d	                    dEk    rB|)                    |+                    d	          dGz   |+                    dH          z              |)                    |*d	                    ׉=                    dId                    t          dJ |)D                                  d            |             	dK|
v rpt          dL |D             d          }|rT=                    d%t          |
           d&           =                    t          |                      |             
bdM|
v s|
dNk    rpt          dO |D             d          }|rT=                    d%t          |
           d&           =                    t!          |                      |             
dP|
v sdQ|
v r<t#          dR |D                       r"=                    d%t          |
           d&           d},|D ]}*|*d         dBk    r|*d	         D ]}-t          j        dS|-          }.|.re|,dTt          |.                    d	                     dUt          |-t          |.                    d	                    d	z   d                    dVz  },~|,t          |-           dVz  },|*d         dCk    r|,t          |*d	                    dVz  },Ӊ=                    dW|, d             |             !dX|
v sdY|
v rjt          dZ |D             d          }|rN=                    d%t          |
           d&           =                    t          |             |             d[|
v r=                    d%t          |
           d&           t          d\ |D             d          }|rY|\  }!}"d] |"D             dd^         }/d_ |"D             }0d` |"D             }1|/r"=                    t%          |/                     g }2|0rBd                    da |0D                       }|2                    t'          db|                     |1rBd                    dc |1D                       }|2                    t'          dd|                     t          |2          dHk    r-=                    ded                    |2           d            n.t          |2          d	k    r=                    |2d                     |             4df|
v rnt          dg |D             d          }|rR=                    d%t          |
           d&           =                    t          |dhdidj            |             dk|
v sdl|
v sdm|
v rjt          dn |D             d          }|rN=                    d%t          |
           d&           =                    t          |             |             do|
v r=                    d%t          |
           d&           |D ]]}*|*d         dpv rQ|*d         dCk    r|*d	         nd-                    |*d	                   } =                    dq A|            dr           ^ |             ds|
v sd3|
v rt          dt |D             d          }|rB=                    d%t          |
           d&           =                    t          |            |D ]@}*|*d         dCk    r(=                    du A|*d	                    dv            |             Adw|
v s	dx|
v sdy|
v r~=                    d%t          |
           d&           g })|D ]Q}*|*d         dBk    r|)                    |*d	                    *|*d         dCk    r|)                    |*d	                    Rdy|
v rg }|)D ]}-t          j        dzd|-d	{                                          }3t          j        d||3          }+|+rzt          |+                    d	          p|+                    dH          pd          dHk    r=|+                    d	          p|+                    dH                                          }4n
|3ddE         }4d}t          |4           }5|                    t)          |5d~t          |3           d                     |rt          |          d	k    r=                    |d                    nt+          dt          |          dH          D ]j}6||6|6dHz            }7t          |7          d	k    r=                    |7d                    >=                    d+d                    |7           d            kn"=                    t-          |)                      |             d|
k    rt          d |D             d          }|rc|\  }!}"d}8g }9|"D ]}%|%d                             d          rt          j        d|%d	                   }:|:r`dt          |:                    d	                     d}8|9                    dt          |:                    dH                     d           dt          |%d	                    d}8|9                    dt          |%d                    dt          |%d	                    d           =                    d%t          |
           d&           =                    d|8 dd                    |9           d            |             mt#          d |D                       r\t          d |D                       }=                    d%t          |
           d&           =                    t          |            ng })|D ]Q}*|*d         dBk    r|)                    |*d	                    *|*d         dCk    r|)                    |*d	                    R=                    d%t          |
           d&           d                    d |)D                       }=                    dId                    |           d            |             |                    d          rS |              |             t          j        dd|          } =                    d A|            d            |d	z  }|                    d,          rI |             t          j        dd|          } =                    d/ A|            d            |d	z  }{t          |          dk    s|                    d          rB                    |           |d	z  }|d	z  }|t          |          k      |              |             ?rod};?D ]4\  }}|                    d          rdnd}<|;t/          |<|z   |          z  };5t          ?          dHk    rd+|; d };|; dd                    =          z   dhfS d                    =          t1          ?          fS )u5   把模块的 blocks 序列渲染成 0813 组件版式r1   r   Nc                  H     r                      f           d g c d S rp   r=   )news_buffer
news_cards
news_titles   r   
flush_newsz"render_section.<locals>.flush_newsu  s7    !k!z;7888"&
KKKr   c                  b    r+D ]$}                      d |            d           %g d S d S )N<p class="note"></p>r  )rO   htmls	para_htmlpending_paras    r   flush_parasz#render_section.<locals>.flush_paras{  sX     	! D DB		!BBBCCCCLLL	 	r   c                     t          j         |                                           }t          j        dd|t          j                  }t          j        dd |          }|S )Nra   rb   rc   rn   c                 F    t          |                     d                    S rV   )rz   r
   rW   s    r   rm   z3render_section.<locals>.para_html.<locals>.<lambda>  s    =QR;T;T r   )rq   r    r   r[   rr   )rO   rt   s     r   r  z!render_section.<locals>.para_html  sV    a  &&((F>5!24888F/1T1TVWXXr   c                 6   g d}g fd}|t          |           k     r| |         }|                    d          r |             |dz   t          |           k     rt          j        d| |dz                      rt	          | |d                   \  }}                    d||ff           |dz  }|t          |           k     rN| |                             d          r3|dz  }|t          |           k     r| |                             d          3
|dz  }t          j        d	|          r0                    t          j        d
d|                     |dz  }V|                    d          r0                    t          j        dd|                     |dz  }|                    d          r( |                                 d|f           |dz  } |                                 d|f           |dz  }  |             S )uL   小节内容 → blocks: ('table',(hdr,rows)) / ('list',[..]) / ('para',txt)r   c                  v    r5                      dd d          f                                            d S d S )Nlist)r=   clear)r1   cur_lists   r   	push_listz9render_section.<locals>.parse_h3_items.<locals>.push_list  sL     Gvx{3444hnn6F6F6F6F6FG Gr   r3   r   z^\|[\s:|-]+\|Ntabler.   z	^\d+\.\s+	^\d+\.\s*r   z- z^-    归因quotepara)r:   r;   r   r   rC   r=   r[   )r   kr  r   r@   rA   r1   r  s         @@r   parse_h3_itemsz&render_section.<locals>.parse_h3_items  s7   	G 	G 	G 	G 	G 	G #e**nnqB}}S!! 	!	q53u::%%"(3CU1Q3Z*P*P% +E!""I 6 6ICMM7S$K"8999FAc%jj..U1X-@-@-E-E.Q c%jj..U1X-@-@-E-E.Qxb)) P|R < <===qAvqx}}T"" Jvr2 6 6777a}}X&& ?	wm,,,a1fahIKKKMM62,'''a	r   u&   ^####\s+(外围|内因|外盘|内盘)$r   #######r"  z^\d+\.r!  r   z^###\s+(.*)$)r(  r'  	   已兑现)r)     正在兑现中	   预期差c                     |D ]D}|d         dv r8|d         dk    r|d         n|d         g}|                               |           Ed S )Nr   r  r$  r  r   )extend)r0   r1   bitems_plan3s       r   collect_planz$render_section.<locals>.collect_plan  sd    # 8 8Q4#333-.qTV^^QqTT!A$F!%L//7778 8r   )r*  r+  z^###\s+u.   <span class="badge-g yes">✓ 已兑现</span>u4   <span class="badge-g ing">◐ 正在兑现中</span>u.   <span class="badge-g gap">⚖ 预期差</span>c              3   <   K   | ]}d t          |           dV  dS r   r   Nr   )r   r%  s     r   r   z!render_section.<locals>.<genexpr>  s4      !N!Na"9"9"9"9!N!N!N!N!N!Nr   u   <li>—</li>r   zF</div><div class="cb-body"><ul style="list-style:none;padding-left:0">r  z<div class="plan3">r   u   方向操作u	   观察点u   信号c              3   >   K   | ]}|d          dk    |d         V  dS r   r   r   Nr5   r   r/  s     r   r   z!render_section.<locals>.<genexpr>  .      BB1!A$'//!A$////BBr   z<h3 class="block">z</h3>r   u   ^方向\s*[AB]\s*[:：]c                    t          j        d|           }|r>|                    d          |                    d          |                    d          fn| d d         | d f\  }}}d| d| }dt          |           d}g }d	}	|D ]}
|
d
         dk    r%|
d         \  }}|r|r|d
                                         dv rd}	g }|D ]}|d
                                                             d          r-|                    dt          |d                    d           \|                    dt          |d
                    dt          |d                    d           |                    dd                    |           d           |                    t          |
d         dd
i           5|
d
         dk    rC|                    dd                    t          |
d                             z   dz              |
d
         dk    r(|                    d |
d                    d           |rd| dnd}d| d| d d                    |           d!S )"NuD   ^方向\s*([AB])\s*[:：]\s*(.*?)(?:\s*[（(]([^（）()]*)[）)])?$r   r.   r   u   方向     · rh   rJ   Fr   r   )u   维度u   判断T   双轨结论u~   <li style="list-style:none;margin-top:8px;border-top:1px dashed var(--line);padding-top:8px"><b class="gold">双轨结论:</b>r   <li><b>z:</b> z4<ul style="list-style:none;padding-left:0;margin:0">r   z</ul>r   r  z:<ul style="margin-top:8px;list-style:none;padding-left:0">r$  z'<p class="note" style="margin-top:8px">r  z+<span class="dim" style="font-weight:400">(z)</span>r    r   r   )
r   r   r
   ru   r    r;   r=   r\   r   render_list_items)rO   blksr   g1g2g3headr   rR   is_dimr/  r@   rA   r   r   extrar  s                   r   build_dir_cubez&render_section.<locals>.build_dir_cube  sD   !hjkllAIJ!`!''!**aggajj!''!**!E!EQRSUTUSUQVXY[_P`JBB1R11R11D 8fTll 8 8 8ID"F! i iQ47??()!IC" Jt JABV0V0V)-&()- !f !fA'(tzz||'>'>~'N'N %f(+

 4kW]^_`a^bWcWc4k 4k 4k )l )l )l )l ),

3dVAaD\\3d3dQWXYZ[X\Q]Q]3d3d3d(e(e(e(e $,vcecjcjkncoco,v,v,v w w w w $Had,Ha,H,H I I I IqTV^^ KK(ehjhoho  qB  CD  EF  CG  qH  qH  iI  iI  )I  LS  )S  T  T  T  TqTV^^ KK(gR[R[\]^_\`RaRa(g(g(ghhhZ\dV"VVVVbdE OY  O  OQV  O  Osuszsz{  tA  tA  O  O  O  Or   u"   ^###\s+(方向\s*[AB]\s*[:：].*)$z<div class="cols">r;  r=  c              3   t   K   | ]3}|d          dk    r|d         nd                     |d                   V  4dS )r   r$  r   r=  N)r\   r7  s     r   r   z!render_section.<locals>.<genexpr>'  sD      ZZaqtv~~qtt388AaD>>ZZZZZZr   uo   <div class="pull-quote" style="border-left-color:var(--blue)"><div class="lab">双轨结论 · DUAL-TRACK</div>u   规则验证u   错误归因u   因子u   指标对比c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>.  r8  r   u   扣分c                     |                                  }t          j        d|          }|s| S |                    d          |                    d          }}|dv rd|dvrdnd d	| d
S d| d
S )Nu   ([+\-−]?)(\d+(?:\.\d+)?)r   r.   rE   rF   )0z0.0rH   rG   rI   rJ   z<b class="down">)r    r   	fullmatchr
   )r8   sr   signr   s        r   _penzrender_section.<locals>._pen4  s     !		A "-JA N NA#$ )'(&'ggajj!''!**!D#v~~'hA\<Q<QDDW]'h'hab'h'h'h h#=a#=#=#==r   z<td class="c">r   r   z<tr>r   z!<div class="tbl-wrap"><table><tr>c              3   <   K   | ]}d t          |           dV  dS r   r   )r   rt   s     r   r   z!render_section.<locals>.<genexpr>F  s9      PvPvmnQhX^_`XaXaQhQhQhPvPvPvPvPvPvr   r   u   因果判断u   矛盾c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>L  r8  r   r  r$     ^(.{2,24}?)[:：](.*)$   Fu   ：r.   z+<div class="cube"><div class="cb-body"><ul>c                     g | ]}|S r5   r5   r   r   s     r   r   z"render_section.<locals>.<listcomp>Z  s    i~i~i~qsjli~i~i~r   u   连板c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>]  r8  r   u   主线识别r$   c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>c  r8  r   u   退潮u   风险c              3   *   K   | ]}|d          dv V  dS )r   r-  Nr5   r7  s     r   r   z!render_section.<locals>.<genexpr>l  s,      @@Aqt//@@@@@@r   u   ^(.{2,20}?)[:：]rh      ：</b>z<br>z<div class="warn">u   封单TOPc              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>|  r8  r   u   板块资金c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  r8  r   c                 H    g | ]}|d                               d          | S )r   r   r;   r   r   s     r   r   z"render_section.<locals>.<listcomp>  s.     W W WqAaDOODU4V4V W W W Wr      c                 H    g | ]}|d                               d          | S )r      行业涨幅r]  r^  s     r   r   z"render_section.<locals>.<listcomp>  s-    QQQA11P1PQaQQQr   c                 H    g | ]}|d                               d          | S )r      概念涨幅r]  r^  s     r   r   z"render_section.<locals>.<listcomp>  s-    RRRQ!A$//.2Q2QRqRRRr   c           
   3      K   | ]I}d t          |d                    dt          |d                    dt          |d                    dV  JdS r   r   r=  r.   z<span class="dim"> r   z</span></li>Nru   rz   r^  s     r   r   z!render_section.<locals>.<genexpr>  s        &P  &P  DE&~VAaD\\&~&~M!A$<O<O&~&~djklmnkodpdp&~&~&~  &P  &P  &P  &P  &P  &Pr   ra  c           
   3      K   | ]I}d t          |d                    dt          |d                    dt          |d                    dV  JdS re  rf  r^  s     r   r   z!render_section.<locals>.<genexpr>  s        &Q  &Q  DE&~VAaD\\&~&~M!A$<O<O&~&~djklmnkodpdp&~&~&~  &Q  &Q  &Q  &Q  &Q  &Qr   rc  z*<div class="cols" style="margin-top:12px">u   近10日c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  r8  r   Ti\  )r   r   u   事实u	   七指数u   全景c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  r8  r   u   结论)r$  r  r  r  u   昨日方向验证c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  r8  r   u<   <div class="ok"><b>方向准确率</b><br><span class="dim">z</span></div>u   今日教训u	   待验证u	   新规则u   ^观察中\s*[:：])countu'   ^(.{2,20}?)[,，:：]|^(.{2,20}?)[（(]u+   <span class="badge-g ing">观察中</span> z<span class="dim">r   u   仓位c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  r8  r   u   建议仓位u   ^([^（(]*)[（(](.*)[）)]$zm<span style="font-family:'Helvetica Neue',Arial,sans-serif;font-size:34px;font-weight:800;color:var(--gold)">z.<span style="font-size:13px;color:var(--sub)">z: <b>r   zi<div class="cube"><div class="cb-body" style="display:flex;gap:18px;flex-wrap:wrap;align-items:baseline">z<span style="flex:1;min-width:260px;font-size:13px;padding-left:14px;border-left:2px solid var(--line);display:flex;flex-direction:column;gap:6px">z</span></div></div>c              3   .   K   | ]}|d          dk    V  dS )r   r   Nr5   r7  s     r   r   z!render_section.<locals>.<genexpr>  s*      33q1Q47?333333r   c              3   >   K   | ]}|d          dk    |d         V  dS r6  r5   r7  s     r   r   z!render_section.<locals>.<genexpr>  s.      AA!11AAr   c              3   <   K   | ]}d t          |           dV  dS r4  r   rT  s     r   r   z!render_section.<locals>.<genexpr>  s4      HH26VBZZ666HHHHHHr   u   ^归因判断[:：]?\s*uJ   <div class="pull-quote"><div class="lab">归因判断 · ATTRIBUTION</div>u   ^双轨结论[:：]?\s*r   z**u   外u   ✧ u   ❖ 
)r:   r   r   r
   r;   r=   r[   r    r\   nextru   r   r   r.  r>  r   r   anyr   r   r   rY   r	  r   bool)Dsecbsr?   r  r  r&  rB   m4jm3r0   r   r1   r2  	nxt_titlenxt_bsnxt_ir"   m3nnxt_tjjitsbadgescubesr   rO   rF  j2m3xt2j3its2txtr@   rA   rN  r   r   r   cir8   r0  r/  m2lis_htmlr   r   	flow_rowshangyegainiancolsbody_txthdrC  _k_rowbigrE  m_b
cards_htmlh4_prer  r  r  r  r  r  r1  sD                                                                @@@@@@@r   render_sectionr  k  s   	XBE	AJKJL+ + + + + + +          @ c"gg++UX?DD 
	KMMMJLLL!JAAc"gg++be&6&6v&>&>+r!uGWGWX]G^G^+gijkglgwgw  yA  hB  hB+8Ir!u-- H&&rvlB1'F'FGGGQ c"gg++be&6&6v&>&>+r!uGWGWX]G^G^+gijkglgwgw  yA  hB  hB+ AXor** }	KMMM::<<<HHQKK%%''EAAEc"gg++be&6&6&G&G+RU###Q!VQ c"gg++be&6&6&G&G+A#^E**F,, '&(RbQQ8 8 8 8 8
 [&111!	;  C#f++--bhz6RW=6Y6Y-
  #f++--bhz6RW=6Y6Y-F++(?F5MBBCIIaLL..00E'',, "QY  3v;;..vbz7L7L_7]7].JJvbz222B!GB !3v;;..vbz7L7L_7]7].$S..*=*=>>> "'W-c'WY Y   | |C''!N!N5:!N!N!NNN`R`CLL "{6RU; "{ "{dg"{ "{ "{ | | | |I2775>>IIIJJJ&&+*>*>(eBSBSBBBBBDII ,LL!JfUmm!J!J!JKKKLL1!:!:!:;;;KMMM8x2E:: 1(O O O O O8 (v6673r77ll(#H"R&QQC 1++--BaBDs2ww,,r"v/@/@/Q/Q,BrF+++R1WR s2ww,,r"v/@/@/Q/Q,LLNN44H4H!I!IJJJB 3r77ll  u::??LLq****LL!Lbggenn!L!L!LMMMx// (>U3J3JhhZZSYZZZZZ mLL "lU^U^_bUcUc"l "l "l m m mx&&.E*A*AXQVEVEVZhlqZqZqBBBBBDII ,LL!JfUmm!J!J!JKKK !IC2773<<//> > > !!% 5 5A"$C)21 C CA#%77$'+JDDGG+J+J+J$JCC$'+B&))+B+B+B$BCC#4##4#4#44CC  &QPvPvruPvPvPvIvIv  &Q  &Q  ~A  &Q  &Q  &Q  R  R  R  RXc4%8%8999KMMM85  E^$;$;x5?P?PBBBBBDIIF&--FFFGGG ,LL1....F# 4 4Q46>>6==1+>+>+>+>qTV^^!#*CQqT!J!JB! 4c"((1++&6&6"&<&< &RSW\I\_a_g_ghi_j_jIj l l l l &ad 3 3 3LL  "TrwwWhi~i~w}i~i~i~WW  PA  PA  "T  "T  "T  U  U  UKMMM85  BBBBBDII ,LL!JfUmm!J!J!JKKKLLQ000KMMM8&&%8*;*;BBBBBDII ,LL!JfUmm!J!J!JKKKLLQ000KMMM85  H$5$5 @@@@@@@ ,LL!JfUmm!J!J!JKKK!H# 	> 	>Q46>>&'d D D$&H-A2$F$F#$ !D$,0ufQWWQZZ6H6H0u0uQWXZ[^_`_f_fgh_i_i[j[jkl[l[m[mXnQoQo0u0u0u$uHH$,6"::0C0C0C$CHHD qTV^^$6!A$<<(=(=(==HLL!Fh!F!F!FGGGKMMM85  EUNNBBBBBDII ,LL!JfUmm!J!J!JKKKLL1...KMMM8&&F&--FFFGGGBBBBBDII , !IC W WD W W WXZYZXZ [IQQQQQFRR$RRRG  =[%;%;<<<D H gg  &P  &P  IO  &P  &P  &P  P  PM.#$F$FGGG H gg  &Q  &Q  IP  &Q  &Q  &Q  Q  QM.#$F$FGGG4yyA~~%gRTRYRYZ^R_R_%g%g%ghhhhTaT!W---KMMM8U""BBBBBDII ,LL!JfUmm!J!J!JKKKLL1dc!J!J!JKKKKMMM85  K5$8$8H<M<MBBBBBDII ,LL!JfUmm!J!J!JKKKLL1...KMMM85  F&--FFFGGG N NAt///&'dfnnadd#((1Q4..%L		#%L%L%LMMMx#u,,%0G0GBBBBBDII /LL!JfUmm!J!J!JKKKLL1... , ,Atv~~  &Cdmdmnopqnrdsds  &C  &C  &C  D  D  DKMMM8&&+*>*>+QVBVBVF&--FFFGGG = =Atv~~v}}QqT':':':':1qt)<)<)<%''E$ f f#%6*@"bPQ#R#R#R#X#X#Z#ZX&PRZ[[ /#bhhqkk&FRXXa[[&FB"G"G1"L"L"$((1++"<!!C!C!E!EBB!)#2#BYVTVZZYYYt5c&QYJZJZ5c5c5c%d%deeee ] u::??!LLq2222&+As5zz1&=&= ] ]',RQY'7#&t99>>$)LLa$9$9$9$9$)LL1[bggdmm1[1[1[$\$\$\$\LL!1&!9!9:::x5  BBBBBDII , !ICCE! 	H 	HQ4??>:: H"$(+JAaD"Q"QC" n 'v  Y_  `c  `i  `i  jk  `l  `l  Ym  Ym  'v  'v  'v %-{^dehenenopeqeq^r^r-{-{-{ | | | | 'n  Y_  `a  bc  `d  Ye  Ye  'n  'n  'n!LL  *GZ`abcdaeZfZf  *G  *Gmstuvwtxmymy  *G  *G  *G  H  H  H  HLL!JfUmm!J!J!JKKKLL "[  NQ "[ "[ xz  x  x  @E  xF  xF"[ "[ "[ \ \ \KMMM833F33333 lAAvAAAAAF&--FFFGGGXq\**** = =Atv~~v}}QqT':':':':1qt)<)<)<F&--FFFGGGggHHHHHHHj277SV<<jjjkkkKMMM=="" 	KMMM::<<<&3R<<CLL|fofopsftft|||}}}FAH==(( 	KMMM&3R<<CLL dMVYWZ^^d d d e e eFAHr77R<<2==..<###Q!VQX	Q{
 c"gg++@ KMMM::<<< :
" 	> 	>HAu ||E22>VVF*6A:u===JJz??a@j@@@J   499U#3#33T9999UT*----r   c                    g }| D ]}t          j        d|          }|rt          |                    d                    dk    r]|                    dt          |                    d                     dt          |                    d                     d           |                    dt          |           d           |S )	NrQ  r   r  r<  rX  r.   r   r   )r   r   r:   r
   r=   ru   )r   r   r   r   s       r   r>  r>    s    
C 1 1H.33 	1QWWQZZB&&JJU

!3!3UUF1771::<N<NUUUVVVVJJ/fRjj///0000Jr   z%<div class="kpi hero"><div class="v">uI   <small>/100</small></div><div class="l">综合评分</div><div class="s">u    过渡</div></div>z&<div class="kpi"><div class="v green">u3   </div><div class="l">恐慌度</div><div class="s">u   档</div></div>z%<div class="kpi"><div class="v gold">uN   </div><div class="l">仓位上限</div><div class="s">执行参考</div></div>z$<div class="kpi"><div class="v red">uH   </div><div class="l">涨停</div><div class="s">首板占高</div></div>uH   </div><div class="l">跌停</div><div class="s">高位出清</div></div>r   z <div class="kpi"><div class="v">uH   </div><div class="l">两市成交</div><div class="s">亿元</div></div>uK   </div><div class="l">涨跌比</div><div class="s">跌多涨少</div></div>u=   板</div><div class="l">最高板</div><div class="s">主线 r   u   ^(.{2,30}?)[:：](.*)$u   要点 02dr   z<div class="ln">r   u   核心矛盾z keyz<div class="dpz"><span class="no">z</span><div><div class="k">z</div><div class="ln">u   <section><div class="sec-head"><div class="sec-no">00</div><div class="sec-title">复盘摘要</div><div class="sec-en">Executive Summary</div></div><div class="digest">z</div></section>c              #   `   K   | ])\  }}t           d                              |          %|V  *dS )r0   N)rt  r;   )r   r%  r   s      r   r   r   D  s=      JJTQs7|/F/Fq/I/IJqJJJJJJr   Moduler/   z3<section><div class="sec-head"><div class="sec-no">u$   </div><div class="sec-title">模块 r:  r0   z</div><div class="sec-en">z
</section>z./root/web_reports/build_assets/light_style.cssu  <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{title} 市场复盘 · 钱小兜引擎</title>
<style>{css}</style>
</head>
<body>
<div class="wrap">
  <header class="masthead">
    <div class="tag">钱小兜分析引擎 V10 · DAILY MARKET REVIEW</div>
    <h1>{h1}</h1>
    <div class="sub">行情 · <b>{season}</b> · 主线 {zhuxian}</div>
    <div class="meta">
      <span>{date_cn} · {weekday_cn}</span>
      <span class="season">行情状态 · {season}</span>
      <span>数据来源 · WeStock · 通达信MCP · 腾讯行情</span>
    </div>
  </header>

  <div class="kpis">
    {kpis}
  </div>

  {digest}

  {mods}

  <div class="footer">
    <span>钱小兜分析引擎 V10 · 市场复盘</span>
    <span>数据日期 {date_cn} · 仅供参考不构成投资建议</span>
  </div>
</div>
</body>
</html>.z

  )
r0   cssh1seasonzhuxiandate_cn
weekday_cnkpisdigestmodsreport_z.htmlu   ^\s*\|[\s|:—-]+\|\s*$r   zclass="ladderzclass="flowzclass="themesu   <b>方向 [AB] ·u   [WARN] 表格数不守恒: md=u    html消费=u=    —— 有小节被分支吞掉, 检查标题关键字匹配zOK: z (u    bytes) · season=u	    · mods=u    · kpis=8 · tbl /)NFN)r   )Tr  )x__doc__rq   r   r   sysr   r   r:   argvargprintstderrexitSRCr   OUT_DIRmkdir	read_textmd_text
splitlineslinesr  	kpi_linessummary_itemsr   r?   rB   r   r   r
   r    r;   r=   r   rw  mmr#   r  	compositepanicposzuotingdietingbiduiamountr  maxbanr!   r   r   r  WDr   strptimestrftimer  sectionscurrC   compilerZ   rM   rS   r_   ru   rw   rz   r|   r   r   r   r   r   r   r   r   r	  SEC_ENr  r>  r  amount_vdigest_htmldpsnrL  r%  rR   r<   psr\   body1body2ln1ln2dp_clsr  rt  rq  r   r   r   _noCSS_PexistsCSS	HTML_TMPLtitle_dformathtmlr   
write_textfindallM_md_tblsrk  _html_consumedstatst_sizer5   r   r   <module>r     s    " ! ! ! ! ! ! ! ! ! ! ! ! ! ! !      ) ) ) S]]Q&&chqkkKKMM
 ;	E
#*----xsx{{{MSMMM
',*
+
+ t   
',s


%
%w
%
7
7 	YR]Yu  EAr##A  QUUWWQZZ	xxzzS!! 9**3//5577888	xxzz_$$E##e**nnU1X^^%5%5%@%@%G%Gn+U1X^^-=-=>>B :$$RXXa[[%6%6%8%8999FA	 ##e**nnU1X^^%5%5%@%@%G%Gn
 	 %+ + + \^ ] ] ]U ]S ]7 ]W ]u ]v ]RX S SCCBI1377PQBY!''!***WYGC006B	[))/Rgc>**0b	SBI'--q9PbwBI'--q9PbwBI-s331=TQWWQZZZRTUBI0#66qAXVX	SBI/55WXA`AQAQASASAS^`wBI*C00;R1771:::PR&!W
<
<S1X
<
<33s122w<<
<
<
<++Ydf fVV%H%c844==dCCRHH
 

 	% 	%B7DDA $$$$c!''!**oo

0@0@0B0B0[F[qwwWXzzF[F[ 
{bhhjj++E22{"((**{M$$$$ OOC   BJfgg	
:  	 	 	         
; ; ; ;M M M MI I I;7 ;7 ;7z7 7 7,  6\ \ \ \$7 7 7"@ @ @ @$ !:%<#6&@(&<)01($
 
f. f. f.P   
   	`	  	`  	`  EK  	`  	`  	`  `   	C  	C  	Ckq  	C  	C  	C  C   	D  	D  	D  	D  D   	Aw  	A  	A  	A  A   	C  	C  	C  	C  C$66 }8}}} }   	Bu  	B  	B  	B  B   	K  	K  	Ku|  	K  	K  	K  K J
C	-++ D D1BH.22 	+QWWQZZ1$$ggajj!''!**GAtt''''GAtZZ3r77a<< ::b!f--uzz"QRR&/A/ALE55LE5fUmm:?G66666R)Q..166r

 CF C CqR C C%+VAYYC C&)C C14C C C 	D 	D 	D 	DI*,''#,,I I IK 
 N NC	JJV\\^^JJJH	U	UB!>#&&LIqJN	 	 BKK Mb M M14UM MADWM M')M M7@M M M N N N N 	99Ee9L9L9S9S9U9U]lgl5##W#555[]#	J !W
+
+s1Q3x
+
+#abb'
+
+
s~7G
	kd(;(;   
 $#$$$$ tg & & & 3zrz4grtDDEE**X&&O)D)DDJJ}--.04

?0K0KLC

#7>>??@ ~	E  O8  O  O  O  O  O  VY  V`  a  a  a  a   DS  D  DCHHJJ&  D  D&  D  D33t99  D  Dhp  D  D  tB  D  D  E  E  E  E  Er   