#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import threading
import random
import platform
import subprocess
import os
import sys

POEMS_DB = [
    ("春晓", "孟浩然", "唐", "春眠不觉晓，处处闻啼鸟。\n夜来风雨声，花落知多少。"),
    ("静夜思", "李白", "唐", "床前明月光，疑是地上霜。\n举头望明月，低头思故乡。"),
    ("悯农·其一", "李绅", "唐", "春种一粒粟，秋收万颗子。\n四海无闲田，农夫犹饿死。"),
    ("悯农·其二", "李绅", "唐", "锄禾日当午，汗滴禾下土。\n谁知盘中餐，粒粒皆辛苦。"),
    ("登鹳雀楼", "王之涣", "唐", "白日依山尽，黄河入海流。\n欲穷千里目，更上一层楼。"),
    ("凉州词", "王之涣", "唐", "黄河远上白云间，一片孤城万仞山。\n羌笛何须怨杨柳，春风不度玉门关。"),
    ("望庐山瀑布", "李白", "唐", "日照香炉生紫烟，遥看瀑布挂前川。\n飞流直下三千尺，疑是银河落九天。"),
    ("早发白帝城", "李白", "唐", "朝辞白帝彩云间，千里江陵一日还。\n两岸猿声啼不住，轻舟已过万重山。"),
    ("赠汪伦", "李白", "唐", "李白乘舟将欲行，忽闻岸上踏歌声。\n桃花潭水深千尺，不及汪伦送我情。"),
    ("黄鹤楼送孟浩然之广陵", "李白", "唐", "故人西辞黄鹤楼，烟花三月下扬州。\n孤帆远影碧空尽，唯见长江天际流。"),
    ("望天门山", "李白", "唐", "天门中断楚江开，碧水东流至此回。\n两岸青山相对出，孤帆一片日边来。"),
    ("独坐敬亭山", "李白", "唐", "众鸟高飞尽，孤云独去闲。\n相看两不厌，只有敬亭山。"),
    ("秋浦歌", "李白", "唐", "白发三千丈，缘愁似个长。\n不知明镜里，何处得秋霜。"),
    ("夜宿山寺", "李白", "唐", "危楼高百尺，手可摘星辰。\n不敢高声语，恐惊天上人。"),
    ("客中行", "李白", "唐", "兰陵美酒郁金香，玉碗盛来琥珀光。\n但使主人能醉客，不知何处是他乡。"),
    ("送友人", "李白", "唐", "青山横北郭，白水绕东城。\n此地一为别，孤蓬万里征。\n浮云游子意，落日故人情。\n挥手自兹去，萧萧班马鸣。"),
    ("关山月", "李白", "唐", "明月出天山，苍茫云海间。\n长风几万里，吹度玉门关。\n汉下白登道，胡窥青海湾。\n由来征战地，不见有人还。\n戍客望边邑，思归多苦颜。\n高楼当此夜，叹息未应闲。"),
    ("月下独酌", "李白", "唐", "花间一壶酒，独酌无相亲。\n举杯邀明月，对影成三人。\n月既不解饮，影徒随我身。\n暂伴月将影，行乐须及春。\n我歌月徘徊，我舞影零乱。\n醒时同交欢，醉后各分散。\n永结无情游，相期邈云汉。"),
    ("将进酒", "李白", "唐", "君不见黄河之水天上来，奔流到海不复回。\n君不见高堂明镜悲白发，朝如青丝暮成雪。\n人生得意须尽欢，莫使金樽空对月。\n天生我材必有用，千金散尽还复来。\n烹羊宰牛且为乐，会须一饮三百杯。\n岑夫子，丹丘生，将进酒，杯莫停。\n与君歌一曲，请君为我倾耳听。\n钟鼓馔玉不足贵，但愿长醉不愿醒。\n古来圣贤皆寂寞，惟有饮者留其名。\n陈王昔时宴平乐，斗酒十千恣欢谑。\n主人何为言少钱，径须沽取对君酌。\n五花马，千金裘，呼儿将出换美酒，与尔同销万古愁。"),
    ("行路难·其一", "李白", "唐", "金樽清酒斗十千，玉盘珍羞直万钱。\n停杯投箸不能食，拔剑四顾心茫然。\n欲渡黄河冰塞川，将登太行雪满山。\n闲来垂钓碧溪上，忽复乘舟梦日边。\n行路难，行路难，多歧路，今安在？\n长风破浪会有时，直挂云帆济沧海。"),
    ("蜀道难", "李白", "唐", "噫吁嚱，危乎高哉！\n蜀道之难，难于上青天！\n蚕丛及鱼凫，开国何茫然！\n尔来四万八千岁，不与秦塞通人烟。\n西当太白有鸟道，可以横绝峨眉巅。\n地崩山摧壮士死，然后天梯石栈相钩连。\n上有六龙回日之高标，下有冲波逆折之回川。\n黄鹤之飞尚不得过，猿猱欲度愁攀援。\n青泥何盘盘，百步九折萦岩峦。\n扪参历井仰胁息，以手抚膺坐长叹。\n问君西游何时还？畏途巉岩不可攀。\n但见悲鸟号古木，雄飞雌从绕林间。\n又闻子规啼夜月，愁空山。\n蜀道之难，难于上青天，使人听此凋朱颜！\n连峰去天不盈尺，枯松倒倚绝壁。\n飞湍瀑流争喧豗，砯崖转石万壑雷。\n其险也如此，嗟尔远道之人胡为乎来哉！\n剑阁峥嵘而崔嵬，一夫当关，万夫莫开。\n所守或匪亲，化为狼与豺。\n朝避猛虎，夕避长蛇。\n磨牙吮血，杀人如麻。\n锦城虽云乐，不如早还家。\n蜀道之难，难于上青天，侧身西望长咨嗟！"),
    ("庐山谣寄卢侍御虚舟", "李白", "唐", "我本楚狂人，凤歌笑孔丘。\n手持绿玉杖，朝别黄鹤楼。\n五岳寻仙不辞远，一生好入名山游。\n庐山秀出南斗傍，屏风九叠云锦张。\n影落明湖青黛光，金阙前开二峰长。\n银河倒挂三石梁，香炉瀑布遥相望。\n回崖沓嶂凌苍苍，翠影红霞映朝日。\n鸟飞不到吴天长，登高壮观天地间。\n大江茫茫去不还，黄云万里动风色。\n白波九道流雪山，好为庐山谣。\n兴因庐山发，闲窥石镜清我心。\n谢公行处苍苔没，早服还丹无世情。\n琴心三叠道初成，遥见仙人彩云里。\n手把芙蓉朝玉京，先期汗漫九垓上。\n愿接卢敖游太清。"),
    ("梦游天姥吟留别", "李白", "唐", "海客谈瀛洲，烟涛微茫信难求。\n越人语天姥，云霞明灭或可睹。\n天姥连天向天横，势拔五岳掩赤城。\n天台四万八千丈，对此欲倒东南倾。\n我欲因之梦吴越，一夜飞度镜湖月。\n湖月照我影，送我至剡溪。\n谢公宿处今尚在，渌水荡漾清猿啼。\n脚著谢公屐，身登青云梯。\n半壁见海日，空中闻天鸡。\n千岩万转路不定，迷花倚石忽已暝。\n熊咆龙吟殷岩泉，栗深林兮惊层巅。\n云青青兮欲雨，水澹澹兮生烟。\n列缺霹雳，丘峦崩摧。\n洞天石扉，訇然中开。\n青冥浩荡不见底，日月照耀金银台。\n霓为衣兮风为马，云之君兮纷纷而来下。\n虎鼓瑟兮鸾回车，仙之人兮列如麻。\n忽魂悸以魄动，恍惊起而长嗟。\n惟觉时之枕席，失向来之烟霞。\n世间行乐亦如此，古来万事东流水。\n别君去兮何时还？\n且放白鹿青崖间，须行即骑访名山。\n安能摧眉折腰事权贵，使我不得开心颜！"),
    ("春望", "杜甫", "唐", "国破山河在，城春草木深。\n感时花溅泪，恨别鸟惊心。\n烽火连三月，家书抵万金。\n白头搔更短，浑欲不胜簪。"),
    ("绝句", "杜甫", "唐", "两个黄鹂鸣翠柳，一行白鹭上青天。\n窗含西岭千秋雪，门泊东吴万里船。"),
    ("望岳", "杜甫", "唐", "岱宗夫如何？齐鲁青未了。\n造化钟神秀，阴阳割昏晓。\n荡胸生曾云，决眦入归鸟。\n会当凌绝顶，一览众山小。"),
    ("江畔独步寻花", "杜甫", "唐", "黄四娘家花满蹊，千朵万朵压枝低。\n留连戏蝶时时舞，自在娇莺恰恰啼。"),
    ("春夜喜雨", "杜甫", "唐", "好雨知时节，当春乃发生。\n随风潜入夜，润物细无声。\n野径云俱黑，江船火独明。\n晓看红湿处，花重锦官城。"),
    ("绝句二首·其一", "杜甫", "唐", "迟日江山丽，春风花草香。\n泥融飞燕子，沙暖睡鸳鸯。"),
    ("旅夜书怀", "杜甫", "唐", "细草微风岸，危樯独夜舟。\n星垂平野阔，月涌大江流。\n名岂文章著，官应老病休。\n飘飘何所似，天地一沙鸥。"),
    ("月夜忆舍弟", "杜甫", "唐", "戍鼓断人行，边秋一雁声。\n露从今夜白，月是故乡明。\n有弟皆分散，无家问死生。\n寄书长不达，况乃未休兵。"),
    ("登高", "杜甫", "唐", "风急天高猿啸哀，渚清沙白鸟飞回。\n无边落木萧萧下，不尽长江滚滚来。\n万里悲秋常作客，百年多病独登台。\n艰难苦恨繁霜鬓，潦倒新停浊酒杯。"),
    ("茅屋为秋风所破歌", "杜甫", "唐", "八月秋高风怒号，卷我屋上三重茅。\n茅飞渡江洒江郊，高者挂罥长林梢，\n下者飘转沉塘坳。\n南村群童欺我老无力，忍能对面为盗贼。\n公然抱茅入竹去，唇焦口燥呼不得，\n归来倚杖自叹息。\n俄顷风定云墨色，秋天漠漠向昏黑。\n布衾多年冷似铁，娇儿恶卧踏里裂。\n床头屋漏无干处，雨脚如麻未断绝。\n自经丧乱少睡眠，长夜沾湿何由彻！\n安得广厦千万间，大庇天下寒士俱欢颜，\n风雨不动安如山！\n呜呼！何时眼前突兀见此屋，吾庐独破受冻死亦足！"),
    ("闻官军收河南河北", "杜甫", "唐", "剑外忽传收蓟北，初闻涕泪满衣裳。\n却看妻子愁何在，漫卷诗书喜欲狂。\n白日放歌须纵酒，青春作伴好还乡。\n即从巴峡穿巫峡，便下襄阳向洛阳。"),
    ("赠花卿", "杜甫", "唐", "锦城丝管日纷纷，半入江风半入云。\n此曲只应天上有，人间能得几回闻。"),
    ("八阵图", "杜甫", "唐", "功盖三分国，名成八阵图。\n江流石不转，遗恨失吞吴。"),
    ("江南逢李龟年", "杜甫", "唐", "岐王宅里寻常见，崔九堂前几度闻。\n正是江南好风景，落花时节又逢君。"),
    ("蜀相", "杜甫", "唐", "丞相祠堂何处寻，锦官城外柏森森。\n映阶碧草自春色，隔叶黄鹂空好音。\n三顾频烦天下计，两朝开济老臣心。\n出师未捷身先死，长使英雄泪满襟。"),
    ("咏柳", "贺知章", "唐", "碧玉妆成一树高，万条垂下绿丝绦。\n不知细叶谁裁出，二月春风似剪刀。"),
    ("回乡偶书", "贺知章", "唐", "少小离家老大回，乡音无改鬓毛衰。\n儿童相见不相识，笑问客从何处来。"),
    ("回乡偶书·其二", "贺知章", "唐", "离别家乡岁月多，近来人事半消磨。\n惟有门前镜湖水，春风不改旧时波。"),
    ("宿建德江", "孟浩然", "唐", "移舟泊烟渚，日暮客愁新。\n野旷天低树，江清月近人。"),
    ("过故人庄", "孟浩然", "唐", "故人具鸡黍，邀我至田家。\n绿树村边合，青山郭外斜。\n开轩面场圃，把酒话桑麻。\n待到重阳日，还来就菊花。"),
    ("秋登万山寄张五", "孟浩然", "唐", "北山白云里，隐者自怡悦。\n相望试登高，心随雁飞灭。\n愁因薄暮起，兴是清秋发。\n时见归村人，沙行渡头歇。\n天边树若荠，江畔洲如月。\n何当载酒来，共醉重阳节。"),
    ("早寒江上有怀", "孟浩然", "唐", "木落雁南度，北风江上寒。\n我家襄水曲，遥隔楚云端。\n乡泪客中尽，孤帆天际看。\n迷津欲有问，平海夕漫漫。"),
    ("九月九日忆山东兄弟", "王维", "唐", "独在异乡为异客，每逢佳节倍思亲。\n遥知兄弟登高处，遍插茱萸少一人。"),
    ("鹿柴", "王维", "唐", "空山不见人，但闻人语响。\n返景入深林，复照青苔上。"),
    ("竹里馆", "王维", "唐", "独坐幽篁里，弹琴复长啸。\n深林人不知，明月来相照。"),
    ("送元二使安西", "王维", "唐", "渭城朝雨浥轻尘，客舍青青柳色新。\n劝君更尽一杯酒，西出阳关无故人。"),
    ("山居秋暝", "王维", "唐", "空山新雨后，天气晚来秋。\n明月松间照，清泉石上流。\n竹喧归浣女，莲动下渔舟。\n随意春芳歇，王孙自可留。"),
    ("鸟鸣涧", "王维", "唐", "人闲桂花落，夜静春山空。\n月出惊山鸟，时鸣春涧中。"),
    ("相思", "王维", "唐", "红豆生南国，春来发几枝。\n愿君多采撷，此物最相思。"),
    ("使至塞上", "王维", "唐", "单车欲问边，属国过居延。\n征蓬出汉塞，归雁入胡天。\n大漠孤烟直，长河落日圆。\n萧关逢候骑，都护在燕然。"),
    ("终南别业", "王维", "唐", "中岁颇好道，晚家南山陲。\n兴来每独往，胜事空自知。\n行到水穷处，坐看云起时。\n偶然值林叟，谈笑无还期。"),
    ("汉江临泛", "王维", "唐", "楚塞三湘接，荆门九派通。\n江流天地外，山色有无中。\n郡邑浮前浦，波澜动远空。\n襄阳好风日，留醉与山翁。"),
    ("终南山", "王维", "唐", "太乙近天都，连山接海隅。\n白云回望合，青霭入看无。\n分野中峰变，阴晴众壑殊。\n欲投人处宿，隔水问樵夫。"),
    ("田园乐·其六", "王维", "唐", "桃红复含宿雨，柳绿更带朝烟。\n花落家童未扫，莺啼山客犹眠。"),
    ("杂诗", "王维", "唐", "君自故乡来，应知故乡事。\n来日绮窗前，寒梅著花未？"),
    ("送别", "王维", "唐", "下马饮君酒，问君何所之？\n君言不得意，归卧南山陲。\n但去莫复问，白云无尽时。"),
    ("九月九日眺山川", "王勃", "唐", "九月九日望遥空，秋水秋天生夕风。\n寒雁一向南方去，满城秋色动衰翁。"),
    ("送杜少府之任蜀州", "王勃", "唐", "城阙辅三秦，风烟望五津。\n与君离别意，同是宦游人。\n海内存知己，天涯若比邻。\n无为在歧路，儿女共沾巾。"),
    ("咏鹅", "骆宾王", "唐", "鹅，鹅，鹅，曲项向天歌。\n白毛浮绿水，红掌拨清波。"),
    ("在狱咏蝉", "骆宾王", "唐", "西陆蝉声唱，南冠客思侵。\n那堪玄鬓影，来对白头吟。\n露重飞难进，风多响易沉。\n无人信高洁，谁为表予心？"),
    ("从军行", "杨炯", "唐", "烽火照西京，心中自不平。\n牙璋辞凤阙，铁骑绕龙城。\n雪暗凋旗画，风多杂鼓声。\n宁为百夫长，胜作一书生。"),
    ("渡汉江", "宋之问", "唐", "岭外音书绝，经冬复立春。\n近乡情更怯，不敢问来人。"),
    ("题大庾岭北驿", "宋之问", "唐", "阳月南飞雁，传闻至此回。\n我行殊未已，何日复归来？\n江静潮初落，林昏瘴不开。\n明朝望乡处，应见陇头梅。"),
    ("枫桥夜泊", "张继", "唐", "月落乌啼霜满天，江枫渔火对愁眠。\n姑苏城外寒山寺，夜半钟声到客船。"),
    ("滁州西涧", "韦应物", "唐", "独怜幽草涧边生，上有黄鹂深树鸣。\n春潮带雨晚来急，野渡无人舟自横。"),
    ("江雪", "柳宗元", "唐", "千山鸟飞绝，万径人踪灭。\n孤舟蓑笠翁，独钓寒江雪。"),
    ("渔翁", "柳宗元", "唐", "渔翁夜傍西岩宿，晓汲清湘燃楚竹。\n烟销日出不见人，欸乃一声山水绿。\n回看天际下中流，岩上无心云相逐。"),
    ("游子吟", "孟郊", "唐", "慈母手中线，游子身上衣。\n临行密密缝，意恐迟迟归。\n谁言寸草心，报得三春晖。"),
    ("登科后", "孟郊", "唐", "昔日龌龊不足夸，今朝放荡思无涯。\n春风得意马蹄疾，一日看尽长安花。"),
    ("洛桥晚望", "孟郊", "唐", "天津桥下冰初结，洛阳陌上人行绝。\n榆柳萧疏楼阁闲，月明直见嵩山雪。"),
    ("竹枝词", "刘禹锡", "唐", "杨柳青青江水平，闻郎江上唱歌声。\n东边日出西边雨，道是无晴却有晴。"),
    ("乌衣巷", "刘禹锡", "唐", "朱雀桥边野草花，乌衣巷口夕阳斜。\n旧时王谢堂前燕，飞入寻常百姓家。"),
    ("望洞庭", "刘禹锡", "唐", "湖光秋月两相和，潭面无风镜未磨。\n遥望洞庭山水翠，白银盘里一青螺。"),
    ("浪淘沙", "刘禹锡", "唐", "九曲黄河万里沙，浪淘风簸自天涯。\n如今直上银河去，同到牵牛织女家。"),
    ("酬乐天扬州初逢席上见赠", "刘禹锡", "唐", "巴山楚水凄凉地，二十三年弃置身。\n怀旧空吟闻笛赋，到乡翻似烂柯人。\n沉舟侧畔千帆过，病树前头万木春。\n今日听君歌一曲，暂凭杯酒长精神。"),
    ("秋词", "刘禹锡", "唐", "自古逢秋悲寂寥，我言秋日胜春朝。\n晴空一鹤排云上，便引诗情到碧霄。"),
    ("石头城", "刘禹锡", "唐", "山围故国周遭在，潮打空城寂寞回。\n淮水东边旧时月，夜深还过女墙来。"),
    ("赋得古原草送别", "白居易", "唐", "离离原上草，一岁一枯荣。\n野火烧不尽，春风吹又生。\n远芳侵古道，晴翠接荒城。\n又送王孙去，萋萋满别情。"),
    ("忆江南", "白居易", "唐", "江南好，风景旧曾谙。\n日出江花红胜火，春来江水绿如蓝。\n能不忆江南？"),
    ("暮江吟", "白居易", "唐", "一道残阳铺水中，半江瑟瑟半江红。\n可怜九月初三夜，露似真珠月似弓。"),
    ("钱塘湖春行", "白居易", "唐", "孤山寺北贾亭西，水面初平云脚低。\n几处早莺争暖树，谁家新燕啄春泥。\n乱花渐欲迷人眼，浅草才能没马蹄。\n最爱湖东行不足，绿杨阴里白沙堤。"),
    ("大林寺桃花", "白居易", "唐", "人间四月芳菲尽，山寺桃花始盛开。\n长恨春归无觅处，不知转入此中来。"),
    ("琵琶行", "白居易", "唐", "浔阳江头夜送客，枫叶荻花秋瑟瑟。\n主人下马客在船，举酒欲饮无管弦。\n醉不成欢惨将别，别时茫茫江浸月。\n忽闻水上琵琶声，主人忘归客不发。\n寻声暗问弹者谁，琵琶声停欲语迟。\n移船相近邀相见，添酒回灯重开宴。\n千呼万唤始出来，犹抱琵琶半遮面。\n转轴拨弦三两声，未成曲调先有情。\n弦弦掩抑声声思，似诉平生不得志。\n低眉信手续续弹，说尽心中无限事。\n轻拢慢捻抹复挑，初为霓裳后六幺。\n大弦嘈嘈如急雨，小弦切切如私语。\n嘈嘈切切错杂弹，大珠小珠落玉盘。\n间关莺语花底滑，幽咽泉流冰下难。\n冰泉冷涩弦凝绝，凝绝不通声暂歇。\n别有幽愁暗恨生，此时无声胜有声。\n银瓶乍破水浆迸，铁骑突出刀枪鸣。\n曲终收拨当心画，四弦一声如裂帛。\n东船西舫悄无言，唯见江心秋月白。\n沉吟放拨插弦中，整顿衣裳起敛容。\n自言本是京城女，家在虾蟆陵下住。\n十三学得琵琶成，名属教坊第一部。\n曲罢曾教善才服，妆成每被秋娘妒。\n五陵年少争缠头，一曲红绡不知数。\n钿头银篦击节碎，血色罗裙翻酒污。\n今年欢笑复明年，秋月春风等闲度。\n弟走从军阿姨死，暮去朝来颜色故。\n门前冷落鞍马稀，老大嫁作商人妇。\n商人重利轻别离，前月浮梁买茶去。\n去来江口守空船，绕船月明江水寒。\n夜深忽梦少年事，梦啼妆泪红阑干。\n我闻琵琶已叹息，又闻此语重唧唧。\n同是天涯沦落人，相逢何必曾相识！\n我从去年辞帝京，谪居卧病浔阳城。\n浔阳地僻无音乐，终岁不闻丝竹声。\n住近湓江地低湿，黄芦苦竹绕宅生。\n其间旦暮闻何物，杜鹃啼血猿哀鸣。\n春江花朝秋月夜，往往取酒还独倾。\n岂无山歌与村笛，呕哑嘲哳难为听。\n今夜闻君琵琶语，如听仙乐耳暂明。\n莫辞更坐弹一曲，为君翻作琵琶行。\n感我此言良久立，却坐促弦弦转急。\n凄凄不似向前声，满座重闻皆掩泣。\n座中泣下谁最多？江州司马青衫湿。"),
    ("卖炭翁", "白居易", "唐", "卖炭翁，伐薪烧炭南山中。\n满面尘灰烟火色，两鬓苍苍十指黑。\n卖炭得钱何所营？身上衣裳口中食。\n可怜身上衣正单，心忧炭贱愿天寒。\n夜来城外一尺雪，晓驾炭车辗冰辙。\n牛困人饥日已高，市南门外泥中歇。\n翩翩两骑来是谁？黄衣使者白衫儿。\n手把文书口称敕，回车叱牛牵向北。\n一车炭，千余斤，宫使驱将惜不得。\n半匹红绡一丈绫，系向牛头充炭直。"),
    ("长恨歌", "白居易", "唐", "汉皇重色思倾国，御宇多年求不得。\n杨家有女初长成，养在深闺人未识。\n天生丽质难自弃，一朝选在君王侧。\n回眸一笑百媚生，六宫粉黛无颜色。\n春寒赐浴华清池，温泉水滑洗凝脂。\n侍儿扶起娇无力，始是新承恩泽时。\n云鬓花颜金步摇，芙蓉帐暖度春宵。\n春宵苦短日高起，从此君王不早朝。\n承欢侍宴无闲暇，春从春游夜专夜。\n后宫佳丽三千人，三千宠爱在一身。\n金屋妆成娇侍夜，玉楼宴罢醉和春。\n姊妹弟兄皆列土，可怜光彩生门户。\n遂令天下父母心，不重生男重生女。\n骊宫高处入青云，仙乐风飘处处闻。\n缓歌慢舞凝丝竹，尽日君王看不足。\n渔阳鼙鼓动地来，惊破霓裳羽衣曲。\n九重城阙烟尘生，千乘万骑西南行。\n翠华摇摇行复止，西出都门百余里。\n六军不发无奈何，宛转蛾眉马前死。\n花钿委地无人收，翠翘金雀玉搔头。\n君王掩面救不得，回看血泪相和流。\n黄埃散漫风萧索，云栈萦纡登剑阁。\n峨嵋山下少人行，旌旗无光日色薄。\n蜀江水碧蜀山青，圣主朝朝暮暮情。\n行宫见月伤心色，夜雨闻铃肠断声。\n天旋地转回龙驭，到此踌躇不能去。\n马嵬坡下泥土中，不见玉颜空死处。\n君臣相顾尽沾衣，东望都门信马归。\n归来池苑皆依旧，太液芙蓉未央柳。\n芙蓉如面柳如眉，对此如何不泪垂。\n春风桃李花开日，秋雨梧桐叶落时。\n西宫南内多秋草，落叶满阶红不扫。\n梨园弟子白发新，椒房阿监青娥老。\n夕殿萤飞思悄然，孤灯挑尽未成眠。\n迟迟钟鼓初长夜，耿耿星河欲曙天。\n鸳鸯瓦冷霜华重，翡翠衾寒谁与共。\n悠悠生死别经年，魂魄不曾来入梦。\n临邛道士鸿都客，能以精诚致魂魄。\n为感君王辗转思，遂教方士殷勤觅。\n排空驭气奔如电，升天入地求之遍。\n上穷碧落下黄泉，两处茫茫皆不见。\n忽闻海上有仙山，山在虚无缥缈间。\n楼阁玲珑五云起，其中绰约多仙子。\n中有一人字太真，雪肤花貌参差是。\n金阙西厢叩玉扃，转教小玉报双成。\n闻道汉家天子使，九华帐里梦魂惊。\n揽衣推枕起徘徊，珠箔银屏迤逦开。\n云鬓半偏新睡觉，花冠不整下堂来。\n风吹仙袂飘飖举，犹似霓裳羽衣舞。\n玉容寂寞泪阑干，梨花一枝春带雨。\n含情凝睇谢君王，一别音容两渺茫。\n昭阳殿里恩爱绝，蓬莱宫中日月长。\n回头下望人寰处，不见长安见尘雾。\n惟将旧物表深情，钿合金钗寄将去。\n钗留一股合一扇，金钗钿合与君同。\n但令心似金钿坚，天上人间会相见。\n临别殷勤重寄词，词中有誓两心知。\n七月七日长生殿，夜半无人私语时。\n在天愿作比翼鸟，在地愿为连理枝。\n天长地久有时尽，此恨绵绵无绝期。"),
    ("清明", "杜牧", "唐", "清明时节雨纷纷，路上行人欲断魂。\n借问酒家何处有，牧童遥指杏花村。"),
    ("泊秦淮", "杜牧", "唐", "烟笼寒水月笼沙，夜泊秦淮近酒家。\n商女不知亡国恨，隔江犹唱后庭花。"),
    ("江南春", "杜牧", "唐", "千里莺啼绿映红，水村山郭酒旗风。\n南朝四百八十寺，多少楼台烟雨中。"),
    ("山行", "杜牧", "唐", "远上寒山石径斜，白云生处有人家。\n停车坐爱枫林晚，霜叶红于二月花。"),
    ("秋夕", "杜牧", "唐", "银烛秋光冷画屏，轻罗小扇扑流萤。\n天阶夜色凉如水，卧看牵牛织女星。"),
    ("过华清宫", "杜牧", "唐", "长安回望绣成堆，山顶千门次第开。\n一骑红尘妃子笑，无人知是荔枝来。"),
    ("赤壁", "杜牧", "唐", "折戟沉沙铁未销，自将磨洗认前朝。\n东风不与周郎便，铜雀春深锁二乔。"),
    ("遣怀", "杜牧", "唐", "落魄江湖载酒行，楚腰纤细掌中轻。\n十年一觉扬州梦，赢得青楼薄幸名。"),
    ("无题", "李商隐", "唐", "相见时难别亦难，东风无力百花残。\n春蚕到死丝方尽，蜡炬成灰泪始干。\n晓镜但愁云鬓改，夜吟应觉月光寒。\n蓬山此去无多路，青鸟殷勤为探看。"),
    ("夜雨寄北", "李商隐", "唐", "君问归期未有期，巴山夜雨涨秋池。\n何当共剪西窗烛，却话巴山夜雨时。"),
    ("锦瑟", "李商隐", "唐", "锦瑟无端五十弦，一弦一柱思华年。\n庄生晓梦迷蝴蝶，望帝春心托杜鹃。\n沧海月明珠有泪，蓝田日暖玉生烟。\n此情可待成追忆，只是当时已惘然。"),
    ("嫦娥", "李商隐", "唐", "云母屏风烛影深，长河渐落晓星沉。\n嫦娥应悔偷灵药，碧海青天夜夜心。"),
    ("登乐游原", "李商隐", "唐", "向晚意不适，驱车登古原。\n夕阳无限好，只是近黄昏。"),
    ("无题·昨夜星辰昨夜风", "李商隐", "唐", "昨夜星辰昨夜风，画楼西畔桂堂东。\n身无彩凤双飞翼，心有灵犀一点通。\n隔座送钩春酒暖，分曹射覆蜡灯红。\n嗟余听鼓应官去，走马兰台类转蓬。"),
    ("宿骆氏亭寄怀崔雍崔衮", "李商隐", "唐", "竹坞无尘水槛清，相思迢递隔重城。\n秋阴不散霜飞晚，留得枯荷听雨声。"),
    ("贾生", "李商隐", "唐", "宣室求贤访逐臣，贾生才调更无伦。\n可怜夜半虚前席，不问苍生问鬼神。"),
    ("离思五首·其四", "元稹", "唐", "曾经沧海难为水，除却巫山不是云。\n取次花丛懒回顾，半缘修道半缘君。"),
    ("行宫", "元稹", "唐", "寥落古行宫，宫花寂寞红。\n白头宫女在，闲坐说玄宗。"),
    ("菊花", "元稹", "唐", "秋丛绕舍似陶家，遍绕篱边日渐斜。\n不是花中偏爱菊，此花开尽更无花。"),
    ("遣悲怀三首·其二", "元稹", "唐", "昔日戏言身后意，今朝都到眼前来。\n衣裳已施行看尽，针线犹存未忍开。\n尚想旧情怜婢仆，也曾因梦送钱财。\n诚知此恨人人有，贫贱夫妻百事哀。"),
    ("马诗二十三首·其五", "李贺", "唐", "大漠沙如雪，燕山月似钩。\n何当金络脑，快走踏清秋。"),
    ("雁门太守行", "李贺", "唐", "黑云压城城欲摧，甲光向日金鳞开。\n角声满天秋色里，塞上燕脂凝夜紫。\n半卷红旗临易水，霜重鼓寒声不起。\n报君黄金台上意，提携玉龙为君死。"),
    ("南园十三首·其五", "李贺", "唐", "男儿何不带吴钩，收取关山五十州。\n请君暂上凌烟阁，若个书生万户侯。"),
    ("金铜仙人辞汉歌", "李贺", "唐", "茂陵刘郎秋风客，夜闻马嘶晓无迹。\n画栏桂树悬秋香，三十六宫土花碧。\n魏官牵车指千里，东关酸风射眸子。\n空将汉月出宫门，忆君清泪如铅水。\n衰兰送客咸阳道，天若有情天亦老。\n携盘独出月荒凉，渭城已远波声小。"),
    ("石灰吟", "于谦", "唐", "千锤万凿出深山，烈火焚烧若等闲。\n粉骨碎身浑不怕，要留清白在人间。"),
    ("寒食", "韩翃", "唐", "春城无处不飞花，寒食东风御柳斜。\n日暮汉宫传蜡烛，轻烟散入五侯家。"),
    ("江上渔者", "范仲淹", "唐", "江上往来人，但爱鲈鱼美。\n君看一叶舟，出入风波里。"),
    ("早春呈水部张十八员外", "韩愈", "唐", "天街小雨润如酥，草色遥看近却无。\n最是一年春好处，绝胜烟柳满皇都。"),
    ("春雪", "韩愈", "唐", "新年都未有芳华，二月初惊见草芽。\n白雪却嫌春色晚，故穿庭树作飞花。"),
    ("左迁至蓝关示侄孙湘", "韩愈", "唐", "一封朝奏九重天，夕贬潮州路八千。\n欲为圣明除弊事，肯将衰朽惜残年！\n云横秦岭家何在？雪拥蓝关马不前。\n知汝远来应有意，好收吾骨瘴江边。"),
    ("晚春", "韩愈", "唐", "草树知春不久归，百般红紫斗芳菲。\n杨花榆荚无才思，惟解漫天作雪飞。"),
    ("蜂", "罗隐", "唐", "不论平地与山尖，无限风光尽被占。\n采得百花成蜜后，为谁辛苦为谁甜？"),
    ("雪", "罗隐", "唐", "尽道丰年瑞，丰年事若何？\n长安有贫者，为瑞不宜多。"),
    ("题都城南庄", "崔护", "唐", "去年今日此门中，人面桃花相映红。\n人面不知何处去，桃花依旧笑春风。"),
    ("出塞", "王昌龄", "唐", "秦时明月汉时关，万里长征人未还。\n但使龙城飞将在，不教胡马度阴山。"),
    ("芙蓉楼送辛渐", "王昌龄", "唐", "寒雨连江夜入吴，平明送客楚山孤。\n洛阳亲友如相问，一片冰心在玉壶。"),
    ("从军行七首·其四", "王昌龄", "唐", "青海长云暗雪山，孤城遥望玉门关。\n黄沙百战穿金甲，不破楼兰终不还。"),
    ("闺怨", "王昌龄", "唐", "闺中少妇不知愁，春日凝妆上翠楼。\n忽见陌头杨柳色，悔教夫婿觅封侯。"),
    ("采莲曲", "王昌龄", "唐", "荷叶罗裙一色裁，芙蓉向脸两边开。\n乱入池中看不见，闻歌始觉有人来。"),
    ("长信秋词五首·其三", "王昌龄", "唐", "奉帚平明金殿开，暂将团扇共徘徊。\n玉颜不及寒鸦色，犹带昭阳日影来。"),
    ("塞下曲", "卢纶", "唐", "月黑雁飞高，单于夜遁逃。\n欲将轻骑逐，大雪满弓刀。"),
    ("塞下曲·其二", "卢纶", "唐", "林暗草惊风，将军夜引弓。\n平明寻白羽，没在石棱中。"),
    ("晚次鄂州", "卢纶", "唐", "云开远见汉阳城，犹是孤帆一日程。\n估客昼眠知浪静，舟人夜语觉潮生。\n三湘愁鬓逢秋色，万里归心对月明。\n旧业已随征战尽，更堪江上鼓鼙声。"),
    ("望月怀远", "张九龄", "唐", "海上生明月，天涯共此时。\n情人怨遥夜，竟夕起相思。\n灭烛怜光满，披衣觉露滋。\n不堪盈手赠，还寝梦佳期。"),
    ("感遇·其一", "张九龄", "唐", "兰叶春葳蕤，桂华秋皎洁。\n欣欣此生意，自尔为佳节。\n谁知林栖者，闻风坐相悦。\n草木有本心，何求美人折？"),
    ("感遇·其二", "张九龄", "唐", "江南有丹橘，经冬犹绿林。\n岂伊地气暖，自有岁寒心。\n可以荐嘉客，奈何阻重深。\n命运唯所遇，循环不可寻。\n徒言树桃李，此木岂无阴。"),
    ("桃花溪", "张旭", "唐", "隐隐飞桥隔野烟，石矶西畔问渔船。\n桃花尽日随流水，洞在清溪何处边。"),
    ("山中留客", "张旭", "唐", "山光物态弄春晖，莫为轻阴便拟归。\n纵使晴明无雨色，入云深处亦沾衣。"),
    ("春泛若耶溪", "綦毋潜", "唐", "幽意无断绝，此去随所偶。\n晚风吹行舟，花路入溪口。\n际夜转西壑，隔山望南斗。\n潭烟飞溶溶，林月低向后。\n生事且弥漫，愿为持竿叟。"),
    ("黄鹤楼", "崔颢", "唐", "昔人已乘黄鹤去，此地空余黄鹤楼。\n黄鹤一去不复返，白云千载空悠悠。\n晴川历历汉阳树，芳草萋萋鹦鹉洲。\n日暮乡关何处是？烟波江上使人愁。"),
    ("长干曲", "崔颢", "唐", "君家何处住，妾住在横塘。\n停船暂借问，或恐是同乡。"),
    ("别董大", "高适", "唐", "千里黄云白日曛，北风吹雁雪纷纷。\n莫愁前路无知己，天下谁人不识君。"),
    ("除夜作", "高适", "唐", "旅馆寒灯独不眠，客心何事转凄然。\n故乡今夜思千里，霜鬓明朝又一年。"),
    ("听弹琴", "刘长卿", "唐", "泠泠七弦上，静听松风寒。\n古调虽自爱，今人多不弹。"),
    ("逢雪宿芙蓉山主人", "刘长卿", "唐", "日暮苍山远，天寒白屋贫。\n柴门闻犬吠，风雪夜归人。"),
    ("送灵澈上人", "刘长卿", "唐", "苍苍竹林寺，杳杳钟声晚。\n荷笠带斜阳，青山独归远。"),
    ("寻南溪常山道人隐居", "刘长卿", "唐", "一路经行处，莓苔见履痕。\n白云依静渚，春草闭闲门。\n过雨看松色，随山到水源。\n溪花与禅意，相对亦忘言。"),
    ("咏史", "李商隐", "唐", "历览前贤国与家，成由勤俭破由奢。"),
    ("碧玉箫", "白居易", "唐", "碧玉装身尺数长，朱唇一唱春风香。"),
    ("金缕衣", "杜秋娘", "唐", "劝君莫惜金缕衣，劝君惜取少年时。\n花开堪折直须折，莫待无花空折枝。"),
    ("春宫怨", "杜荀鹤", "唐", "早被婵娟误，欲妆临镜慵。\n承恩不在貌，教妾若为容。\n风暖鸟声碎，日高花影重。\n年年越溪女，相忆采芙蓉。"),
    ("社日", "王驾", "唐", "鹅湖山下稻粱肥，豚栅鸡栖半掩扉。\n桑柘影斜春社散，家家扶得醉人归。"),
    ("雨过山村", "王建", "唐", "雨里鸡鸣一两家，竹溪村路板桥斜。\n妇姑相唤浴蚕去，闲看中庭栀子花。"),
    ("十五夜望月", "王建", "唐", "中庭地白树栖鸦，冷露无声湿桂花。\n今夜月明人尽望，不知秋思落谁家。"),
    ("新嫁娘词", "王建", "唐", "三日入厨下，洗手作羹汤。\n未谙姑食性，先遣小姑尝。"),
    ("宫词", "王建", "唐", "树头树底觅残红，一片西飞一片东。\n自是桃花贪结子，错教人恨五更风。"),
    ("游玄都观", "刘禹锡", "唐", "紫陌红尘拂面来，无人不道看花回。\n玄都观里桃千树，尽是刘郎去后栽。"),
    ("再游玄都观", "刘禹锡", "唐", "百亩庭中半是苔，桃花净尽菜花开。\n种桃道士归何处，前度刘郎今又来。"),
    ("月夜", "刘方平", "唐", "更深月色半人家，北斗阑干南斗斜。\n今夜偏知春气暖，虫声新透绿窗纱。"),
    ("采莲曲二首", "王昌龄", "唐", "吴姬越艳楚王妃，争弄莲舟水湿衣。\n来时浦口花迎入，采罢江头月送归。"),
    ("听蜀僧濬弹琴", "李白", "唐", "蜀僧抱绿绮，西下峨眉峰。\n为我一挥手，如听万壑松。\n客心洗流水，馀响入霜钟。\n不觉碧山暮，秋云暗几重。"),
    ("塞下曲六首·其一", "李白", "唐", "五月天山雪，无花只有寒。\n笛中闻折柳，春色未曾看。\n晓战随金鼓，宵眠抱玉鞍。\n愿将腰下剑，直为斩楼兰。"),
    ("南陵别儿童入京", "李白", "唐", "白酒新熟山中归，黄鸡啄黍秋正肥。\n呼童烹鸡酌白酒，儿女嬉笑牵人衣。\n高歌取醉欲自慰，起舞落日争光辉。\n游说万乘苦不早，著鞭跨马涉远道。\n会稽愚妇轻买臣，余亦辞家西入秦。\n仰天大笑出门去，我辈岂是蓬蒿人。"),
    ("子夜吴歌·秋歌", "李白", "唐", "长安一片月，万户捣衣声。\n秋风吹不尽，总是玉关情。\n何日平胡虏，良人罢远征。"),
    ("长干行", "李白", "唐", "妾发初覆额，折花门前剧。\n郎骑竹马来，绕床弄青梅。\n同居长干里，两小无嫌猜。\n十四为君妇，羞颜未尝开。\n低头向暗壁，千唤不一回。\n十五始展眉，愿同尘与灰。\n常存抱柱信，岂上望夫台。\n十六君远行，瞿塘滟滪堆。\n五月不可触，猿声天上哀。\n门前迟行迹，一一生绿苔。\n苔深不能扫，落叶秋风早。\n八月蝴蝶黄，双飞西园草。\n感此伤妾心，坐愁红颜老。\n早晚下三巴，预将书报家。\n相迎不道远，直至长风沙。"),
    ("玉阶怨", "李白", "唐", "玉阶生白露，夜久侵罗袜。\n却下水晶帘，玲珑望秋月。"),
    ("怨情", "李白", "唐", "美人卷珠帘，深坐蹙蛾眉。\n但见泪痕湿，不知心恨谁。"),
    ("清平调词三首·其一", "李白", "唐", "云想衣裳花想容，春风拂槛露华浓。\n若非群玉山头见，会向瑶台月下逢。"),
    ("清平调词三首·其二", "李白", "唐", "一枝红艳露凝香，云雨巫山枉断肠。\n借问汉宫谁得似，可怜飞燕倚新妆。"),
    ("清平调词三首·其三", "李白", "唐", "名花倾国两相欢，长得君王带笑看。\n解释春风无限恨，沉香亭北倚阑干。"),
    ("秋浦歌十七首·其十四", "李白", "唐", "炉火照天地，红星乱紫烟。\n赧郎明月夜，歌曲动寒川。"),
    ("独不见", "沈佺期", "唐", "卢家少妇郁金堂，海燕双栖玳瑁梁。\n九月寒砧催木叶，十年征戍忆辽阳。\n白狼河北音书断，丹凤城南秋夜长。\n谁为含愁独不见，更教明月照流黄。"),
    ("题破山寺后禅院", "常建", "唐", "清晨入古寺，初日照高林。\n曲径通幽处，禅房花木深。\n山光悦鸟性，潭影空人心。\n万籁此都寂，但余钟磬音。"),
    ("三日寻李九庄", "常建", "唐", "雨歇杨林东渡头，永和三日荡轻舟。\n故人家在桃花岸，直到门前溪水流。"),
    ("钓鱼湾", "储光羲", "唐", "垂钓绿湾春，春深杏花乱。\n潭清疑水浅，荷动知鱼散。\n日暮待情人，维舟绿杨岸。"),
    ("小松", "杜荀鹤", "唐", "自小刺头深草里，而今渐觉出蓬蒿。\n时人不识凌云木，直待凌云始道高。"),
    ("农父", "张碧", "唐", "运锄耕劚侵晨起，陇亩丰盈满家喜。\n到头禾黍属他人，不知何处抛妻子。"),
    ("寻隐者不遇", "贾岛", "唐", "松下问童子，言师采药去。\n只在此山中，云深不知处。"),
    ("剑客", "贾岛", "唐", "十年磨一剑，霜刃未曾试。\n今日把示君，谁有不平事？"),
    ("题李凝幽居", "贾岛", "唐", "闲居少邻并，草径入荒园。\n鸟宿池边树，僧敲月下门。\n过桥分野色，移石动云根。\n暂去还来此，幽期不负言。"),
    ("忆江上吴处士", "贾岛", "唐", "闽国扬帆去，蟾蜍亏复圆。\n秋风生渭水，落叶满长安。\n此地聚会夕，当时雷雨寒。\n兰桡殊未返，消息海云端。"),
    ("渡桑干", "贾岛", "唐", "客舍并州已十霜，归心日夜忆咸阳。\n无端更渡桑干水，却望并州是故乡。"),
    ("新上头", "韩偓", "唐", "学梳松鬓试新裙，消息佳期在此春。\n为要好多心转惑，遍将宜称问旁人。"),
    ("春闺思", "张仲素", "唐", "袅袅城边柳，青青陌上桑。\n提筐忘采叶，昨夜梦渔阳。"),
    ("秋闺思", "张仲素", "唐", "碧窗秋梦微，凉气半帘帏。\n月落乌啼后，莺声隔院飞。"),
    ("寒闺怨", "白居易", "唐", "寒月沉沉洞房静，真珠帘外梧桐影。\n秋霜欲下手先知，灯底裁缝剪刀冷。"),
    ("白雪歌送武判官归京", "岑参", "唐", "北风卷地白草折，胡天八月即飞雪。\n忽如一夜春风来，千树万树梨花开。\n散入珠帘湿罗幕，狐裘不暖锦衾薄。\n将军角弓不得控，都护铁衣冷难着。\n瀚海阑干百丈冰，愁云惨淡万里凝。\n中军置酒饮归客，胡琴琵琶与羌笛。\n纷纷暮雪下辕门，风掣红旗冻不翻。\n轮台东门送君去，去时雪满天山路。\n山回路转不见君，雪上空留马行处。"),
    ("逢入京使", "岑参", "唐", "故园东望路漫漫，双袖龙钟泪不干。\n马上相逢无纸笔，凭君传语报平安。"),
    ("走马川行奉送封大夫出师西征", "岑参", "唐", "君不见走马川行雪海边，平沙莽莽黄入天。\n轮台九月风夜吼，一川碎石大如斗，随风满地石乱走。\n匈奴草黄马正肥，金山西见烟尘飞，汉家大将西出师。\n将军金甲夜不脱，半夜军行戈相拨，风头如刀面如割。\n马毛带雪汗气蒸，五花连钱旋作冰，幕中草檄砚水凝。\n虏骑闻之应胆慑，料知短兵不敢接，车师西门伫献捷。"),
    ("山房春事", "岑参", "唐", "风恬日暖荡春光，戏蝶游蜂乱入房。\n数枝门柳低衣桁，一片山花落笔床。"),
    ("碛中作", "岑参", "唐", "走马西来欲到天，辞家见月两回圆。\n今夜不知何处宿，平沙万里绝人烟。"),
    ("过老子庙", "岑参", "唐", "五月修道山，星辰接汉垣。"),
    ("邯郸冬至夜思家", "白居易", "唐", "邯郸驿里逢冬至，抱膝灯前影伴身。\n想得家中夜深坐，还应说着远行人。"),
    ("观刈麦", "白居易", "唐", "田家少闲月，五月人倍忙。\n夜来南风起，小麦覆陇黄。\n妇姑荷箪食，童稚携壶浆。\n相随饷田去，丁壮在南冈。\n足蒸暑土气，背灼炎天光。\n力尽不知热，但惜夏日长。\n复有贫妇人，抱子在其旁。\n右手秉遗穗，左臂悬敝筐。\n听其相顾言，闻者为悲伤。\n家田输税尽，拾此充饥肠。\n今我何功德，曾不事农桑。\n吏禄三百石，岁晏有余粮。\n念此私自愧，尽日不能忘。"),
    ("问刘十九", "白居易", "唐", "绿蚁新醅酒，红泥小火炉。\n晚来天欲雪，能饮一杯无？"),
    ("长相思·汴水流", "白居易", "唐", "汴水流，泗水流，流到瓜洲古渡头。\n吴山点点愁。\n思悠悠，恨悠悠，恨到归时方始休。\n月明人倚楼。"),
    ("南屏晚钟", "张祜", "唐", "日沉浦上远，烟起林中深。\n唯有钱塘水，滔滔直到今。"),
    ("题金陵渡", "张祜", "唐", "金陵津渡小山楼，一宿行人自可愁。\n潮落夜江斜月里，两三星火是瓜洲。"),
    ("集灵台二首·其二", "张祜", "唐", "虢国夫人承主恩，平明骑马入宫门。\n却嫌脂粉污颜色，淡扫蛾眉朝至尊。"),
    ("宫词二首·其一", "张祜", "唐", "故国三千里，深宫二十年。\n一声何满子，双泪落君前。"),
    ("赠内人", "张祜", "唐", "禁门宫树月痕过，媚眼惟看宿鹭窠。\n斜拔玉钗灯影畔，剔开红焰救飞蛾。"),
    ("枫桥夜泊二首", "张继", "唐", "几回趋事向明堂，走马谪仙悲羽觞。"),
    ("丹阳送韦参军", "严维", "唐", "丹阳郭里送行舟，一别心知两地秋。\n日晚江南望江北，寒鸦飞尽水悠悠。"),
    ("苏溪亭", "戴叔伦", "唐", "苏溪亭上草漫漫，谁倚东风十二阑。\n燕子不归春事晚，一汀烟雨杏花寒。"),
    ("兰溪棹歌", "戴叔伦", "唐", "凉月如眉挂柳湾，越中山色镜中看。\n兰溪三日桃花雨，半夜鲤鱼来上滩。"),
    ("三闾庙", "戴叔伦", "唐", "沅湘流不尽，屈子怨何深。\n日暮秋风起，萧萧枫树林。"),
    ("塞上曲", "王昌龄", "唐", "蝉鸣空桑林，八月萧关道。\n出塞入塞寒，处处黄芦草。"),
    ("锦楼", "王昌龄", "唐", "去年来至锦江边，所喜佳人又一年。"),
    ("送李判官之润州行营", "刘长卿", "唐", "万里辞家事鼓鼙，金陵驿路楚云西。\n江春不肯留行客，草色青青送马蹄。"),
    ("秋日", "耿湋", "唐", "返照入闾巷，忧来谁共语。\n古道少人行，秋风动禾黍。"),
    ("喜见外弟又言别", "李益", "唐", "十年离乱后，长大一相逢。\n问姓惊初见，称名忆旧容。\n别来沧海事，语罢暮天钟。\n明日巴陵道，秋山又几重。"),
    ("江南曲", "李益", "唐", "嫁得瞿塘贾，朝朝误妾期。\n早知潮有信，嫁与弄潮儿。"),
    ("夜上受降城闻笛", "李益", "唐", "回乐烽前沙似雪，受降城外月如霜。\n不知何处吹芦管，一夜征人尽望乡。"),
    ("从军北征", "李益", "唐", "天山雪后海风寒，横笛遍吹行路难。\n碛里征人三十万，一时回首月中看。"),
    ("竹窗闻风寄苗发司空曙", "李益", "唐", "微风惊暮坐，临牖思悠哉。\n开窗临碧筱，树径拂尘苔。"),
    ("春思", "皇甫冉", "唐", "莺啼燕语报新年，马邑龙堆路几千。\n家住层城邻汉苑，心随明月到胡天。\n机中锦字论长恨，楼上花枝笑独眠。\n为问元戎窦车骑，何时返旆勒燕然。"),
    ("赋潭州", "杜甫", "唐", "湖南清绝地，万古一长嗟。"),
    ("过故人庄", "孟浩然", "唐", "故人具鸡黍，邀我至田家。"),
    ("秋日赴阙题潼关驿楼", "许浑", "唐", "红叶晚萧萧，长亭酒一瓢。\n残云归太华，疏雨过中条。\n树色随山迥，河声入海遥。\n帝乡明日到，犹自梦渔樵。"),
    ("咸阳城东楼", "许浑", "唐", "一上高城万里愁，蒹葭杨柳似汀洲。\n溪云初起日沉阁，山雨欲来风满楼。\n鸟下绿芜秦苑夕，蝉鸣黄叶汉宫秋。\n行人莫问当年事，故国东来渭水流。"),
    ("秋日赴阙题潼关", "许浑", "唐", "闾阎桑柘遍，禾黍比连村。"),
    ("题乌江亭", "杜牧", "唐", "胜败兵家事不期，包羞忍耻是男儿。\n江东子弟多才俊，卷土重来未可知。"),
    ("叹花", "杜牧", "唐", "自是寻春去校迟，不须惆怅怨芳时。\n狂风落尽深红色，绿树成阴子满枝。"),
    ("题齐安城楼", "杜牧", "唐", "呜轧江楼角一声，微阳潋潋落寒汀。\n不用凭栏苦回首，故乡七十五长亭。"),
    ("柳", "李商隐", "唐", "曾逐东风拂舞筵，乐游春苑断肠天。\n如何肯到清秋日，已带斜阳又带蝉。"),
    ("初食笋呈座中", "李商隐", "唐", "嫩箨香苞初出林，於陵论价重如金。\n皇都陆海应无数，忍剪凌云一寸心。"),
    ("板桥晓别", "李商隐", "唐", "回望高城落晓河，长亭窗户压微波。\n水仙欲上鲤鱼去，一夜芙蓉红泪多。"),
    ("忆梅", "李商隐", "唐", "定定住天涯，依依向物华。\n寒梅最堪恨，常作去年花。"),
    ("天涯", "李商隐", "唐", "春日在天涯，天涯日又斜。\n莺啼如有泪，为湿最高花。"),
    ("漫成一首", "杜甫", "唐", "江月去人只数尺，风灯照夜欲三更。\n沙头宿鹭联拳静，船尾跳鱼拨剌鸣。"),
    ("水槛遣心二首·其一", "杜甫", "唐", "去郭轩楹敞，无村眺望赊。\n澄江平少岸，幽树晚多花。\n细雨鱼儿出，微风燕子斜。\n城中十万户，此地两三家。"),
    ("绝句漫兴九首·其三", "杜甫", "唐", "熟知茅斋绝低小，江上燕子故来频。\n衔泥点污琴书内，更接飞虫打着人。"),
    ("饮中八仙歌", "杜甫", "唐", "知章骑马似乘船，眼花落井水底眠。\n汝阳三斗始朝天，道逢曲车口流涎。\n恨不移封向酒泉，左相日兴费万钱。\n饮如长鲸吸百川，衔杯乐圣称避贤。\n宗之潇洒美少年，举觞白眼望青天。\n皎如玉树临风前，苏晋长斋绣佛前。\n醉中往往爱逃禅，李白斗酒诗百篇。\n长安市上酒家眠，天子呼来不上船。\n自称臣是酒中仙，张旭三杯草传圣。\n脱帽露顶王公前，挥毫落纸如云烟。\n焦遂五斗方卓然，高谈雄辩惊四筵。"),
    ("贫交行", "杜甫", "唐", "翻手为云覆手雨，纷纷轻薄何须数。\n君不见管鲍贫时交，此道今人弃如土。"),
    ("丹青引赠曹霸将军", "杜甫", "唐", "将军魏武之子孙，于今为庶为清门。\n英雄割据虽已矣，文采风流今尚存。"),
    ("前出塞九首·其六", "杜甫", "唐", "挽弓当挽强，用箭当用长。\n射人先射马，擒贼先擒王。\n杀人亦有限，列国自有疆。\n苟能制侵陵，岂在多杀伤。"),
    ("天末怀李白", "杜甫", "唐", "凉风起天末，君子意如何？\n鸿雁几时到，江湖秋水多。\n文章憎命达，魑魅喜人过。\n应共冤魂语，投诗赠汨罗。"),
    ("月夜", "杜甫", "唐", "今夜鄜州月，闺中只独看。\n遥怜小儿女，未解忆长安。\n香雾云鬟湿，清辉玉臂寒。\n何时倚虚幌，双照泪痕干。"),
    ("寄李十二白二十韵", "杜甫", "唐", "昔年有狂客，号儿摘星仙。"),
    ("归雁", "杜甫", "唐", "闻道今春雁，南归自广州。\n见花辞涨海，避雪到罗浮。\n是物关兵气，何时免客愁。\n年年霜露隔，不过五湖秋。"),
    ("孤雁", "杜甫", "唐", "孤雁不饮啄，飞鸣声念群。\n谁怜一片影，相失万重云。\n望尽似犹见，哀多如更闻。\n野鸦无意绪，鸣噪自纷纷。"),
    ("奉济驿重送严公四韵", "杜甫", "唐", "远送从此别，青山空复情。\n几时杯重把，昨夜月同行。\n列郡讴歌惜，三朝出入荣。\n江村独归处，寂寞养残生。"),
    ("八哀诗·其三", "杜甫", "唐", "左辖频虚位，中秋独上楼。"),
    ("石壕吏", "杜甫", "唐", "暮投石壕村，有吏夜捉人。\n老翁逾墙走，老妇出门看。\n吏呼一何怒！妇啼一何苦！\n听妇前致词：三男邺城戍。\n一男附书至，二男新战死。\n存者且偷生，死者长已矣！\n室中更无人，惟有乳下孙。\n有孙母未去，出入无完裙。\n老妪力虽衰，请从吏夜归。\n急应河阳役，犹得备晨炊。\n夜久语声绝，如闻泣幽咽。\n天明登前途，独与老翁别。"),
    ("新婚别", "杜甫", "唐", "兔丝附蓬麻，引蔓故不长。\n嫁女与征夫，不如弃路旁。\n结发为君妻，席不暖君床。\n暮婚晨告别，无乃太匆忙。\n君行虽不远，守边赴河阳。\n妾身未分明，何以拜姑嫜。\n父母养我时，日夜令我藏。\n生女有所归，鸡狗亦得将。\n君今往死地，沉痛迫中肠。\n誓欲随君去，形势反苍黄。\n勿为新婚念，努力事戎行。\n妇人在军中，兵气恐不扬。\n自嗟贫家女，久致罗襦裳。\n罗襦不复施，对君洗红妆。\n仰视百鸟飞，大小必双翔。\n人事多错迕，与君永相望。"),
    ("潼关吏", "杜甫", "唐", "士卒何草草，筑城潼关道。\n大城铁不如，小城万丈余。\n借问潼关吏：修关还备胡？\n要我下马行，为我指山隅。\n连云列战格，飞鸟不能逾。\n胡来但自守，岂复忧西都。\n丈人视要处，窄狭容单车。\n艰难奋长戟，万古用一夫。\n哀哉桃林战，百万化为鱼。\n请嘱防关将，慎勿学哥舒！"),
    ("垂老别", "杜甫", "唐", "四郊未宁静，垂老不得安。\n子孙阵亡尽，焉用身独完！\n投杖出门去，同行为辛酸。\n幸有牙齿存，所悲骨髓干。\n男儿既介胄，长揖别上官。\n老妻卧路啼，岁暮衣裳单。\n孰知是死别，且复伤其寒。\n此去必不归，还闻劝加餐。\n土门壁甚坚，杏园度亦难。\n势异邺城下，纵死时犹宽。\n人生有离合，岂择衰盛端。\n忆昔少壮日，迟回竟长叹。\n万国尽征戍，烽火被冈峦。\n积尸草木腥，流血川原丹。\n何乡为乐土，安敢尚盘桓。\n弃绝蓬室居，塌然摧肺肝。"),
    ("无家别", "杜甫", "唐", "寂寞天宝后，园庐但蒿藜。\n我里百余家，世乱各东西。\n存者无消息，死者为尘泥。\n贱子因阵败，归来寻旧蹊。\n久行见空巷，日瘦气惨凄。\n但对狐与狸，竖毛怒我啼。\n四邻何所有？一二老寡妻。\n宿鸟恋本枝，安辞且穷栖。\n方春独荷锄，日暮还灌畦。\n县吏知我至，召令习鼓鞞。\n虽从本州役，内顾无所携。\n近行止一身，远去终转迷。\n家乡既荡尽，远近理亦齐。\n永痛长病母，五年委沟溪。\n生我不得力，终身两酸嘶。\n人生无家别，何以为蒸黎。"),
    ("丽人行", "杜甫", "唐", "三月三日天气新，长安水边多丽人。\n态浓意远淑且真，肌理细腻骨肉匀。\n绣罗衣裳照暮春，蹙金孔雀银麒麟。\n头上何所有？翠微盍叶垂鬓唇。\n背后何所见？珠压腰衱稳称身。\n就中云幕椒房亲，赐名大国虢与秦。\n紫驼之峰出翠釜，水精之盘行素鳞。\n犀箸厌饫久未下，鸾刀缕切空纷纶。\n黄门飞鞚不动尘，御厨络绎送八珍。\n箫鼓哀吟感鬼神，宾从杂遝实要津。\n后来鞍马何逡巡，当轩下马入锦茵。\n杨花雪落覆白苹，青鸟飞去衔红巾。\n炙手可热势绝伦，慎莫近前丞相嗔。"),
    ("春水生二绝", "杜甫", "唐", "二月六夜春水生，门前小滩浑欲平。"),
    ("漫兴", "杜甫", "唐", "隔户杨柳弱袅袅，恰似十五女儿腰。"),
    ("卜算子·黄州定慧院寓居作", "苏轼", "宋", "缺月挂疏桐，漏断人初静。\n谁见幽人独往来，缥缈孤鸿影。\n惊起却回头，有恨无人省。\n拣尽寒枝不肯栖，寂寞沙洲冷。"),
    ("水调歌头·明月几时有", "苏轼", "宋", "明月几时有？把酒问青天。\n不知天上宫阙，今夕是何年。\n我欲乘风归去，又恐琼楼玉宇，高处不胜寒。\n起舞弄清影，何似在人间。\n转朱阁，低绮户，照无眠。\n不应有恨，何事长向别时圆？\n人有悲欢离合，月有阴晴圆缺，此事古难全。\n但愿人长久，千里共婵娟。"),
    ("念奴娇·赤壁怀古", "苏轼", "宋", "大江东去，浪淘尽，千古风流人物。\n故垒西边，人道是，三国周郎赤壁。\n乱石穿空，惊涛拍岸，卷起千堆雪。\n江山如画，一时多少豪杰。\n遥想公瑾当年，小乔初嫁了，雄姿英发。\n羽扇纶巾，谈笑间，樯橹灰飞烟灭。\n故国神游，多情应笑我，早生华发。\n人生如梦，一尊还酹江月。"),
    ("江城子·密州出猎", "苏轼", "宋", "老夫聊发少年狂，左牵黄，右擎苍。\n锦帽貂裘，千骑卷平冈。\n为报倾城随太守，亲射虎，看孙郎。\n酒酣胸胆尚开张，鬓微霜，又何妨！\n持节云中，何日遣冯唐？\n会挽雕弓如满月，西北望，射天狼。"),
    ("江城子·乙卯正月二十日夜记梦", "苏轼", "宋", "十年生死两茫茫，不思量，自难忘。\n千里孤坟，无处话凄凉。\n纵使相逢应不识，尘满面，鬓如霜。\n夜来幽梦忽还乡，小轩窗，正梳妆。\n相顾无言，惟有泪千行。\n料得年年肠断处，明月夜，短松冈。"),
    ("题西林壁", "苏轼", "宋", "横看成岭侧成峰，远近高低各不同。\n不识庐山真面目，只缘身在此山中。"),
    ("饮湖上初晴后雨", "苏轼", "宋", "水光潋滟晴方好，山色空蒙雨亦奇。\n欲把西湖比西子，淡妆浓抹总相宜。"),
    ("惠崇春江晚景", "苏轼", "宋", "竹外桃花三两枝，春江水暖鸭先知。\n蒌蒿满地芦芽短，正是河豚欲上时。"),
    ("六月二十七日望湖楼醉书", "苏轼", "宋", "黑云翻墨未遮山，白雨跳珠乱入船。\n卷地风来忽吹散，望湖楼下水如天。"),
    ("海棠", "苏轼", "宋", "东风袅袅泛崇光，香雾空蒙月转廊。\n只恐夜深花睡去，故烧高烛照红妆。"),
    ("定风波·莫听穿林打叶声", "苏轼", "宋", "莫听穿林打叶声，何妨吟啸且徐行。\n竹杖芒鞋轻胜马，谁怕？一蓑烟雨任平生。\n料峭春风吹酒醒，微冷，山头斜照却相迎。\n回首向来萧瑟处，归去，也无风雨也无晴。"),
    ("浣溪沙·游蕲水清泉寺", "苏轼", "宋", "山下兰芽短浸溪，松间沙路净无泥。\n萧萧暮雨子规啼。\n谁道人生无再少？门前流水尚能西！\n休将白发唱黄鸡。"),
    ("临江仙·夜归临皋", "苏轼", "宋", "夜饮东坡醒复醉，归来仿佛三更。\n家童鼻息已雷鸣。\n敲门都不应，倚杖听江声。\n长恨此身非我有，何时忘却营营。\n夜阑风静縠纹平。\n小舟从此逝，江海寄余生。"),
    ("蝶恋花·春景", "苏轼", "宋", "花褪残红青杏小。\n燕子飞时，绿水人家绕。\n枝上柳绵吹又少，天涯何处无芳草。\n墙里秋千墙外道。\n墙外行人，墙里佳人笑。\n笑渐不闻声渐悄，多情却被无情恼。"),
    ("如梦令·春思", "苏轼", "宋", "手种堂前桃李，无限绿阴青子。\n帘外百舌儿，惊起五更春睡。\n居士，居士，莫忘小桥流水。"),
    ("水龙吟·次韵章质夫杨花词", "苏轼", "宋", "似花还似非花，也无人惜从教坠。\n抛家傍路，思量却是，无情有思。\n萦损柔肠，困酣娇眼，欲开还闭。\n梦随风万里，寻郎去处，又还被、莺呼起。\n不恨此花飞尽，恨西园、落红难缀。\n晓来雨过，遗踪何在？一池萍碎。\n春色三分，二分尘土，一分流水。\n细看来，不是杨花，点点是离人泪。"),
    ("虞美人·寄公度", "舒亶", "宋", "芙蓉落尽天涵水，日暮沧波起。\n背飞双燕贴云寒，独向小楼东畔、倚阑看。\n浮生只合尊前老，雪满长安道。\n故人早晚上高台，赠我江南春色、一枝梅。"),
    ("满江红·怒发冲冠", "岳飞", "宋", "怒发冲冠，凭栏处、潇潇雨歇。\n抬望眼，仰天长啸，壮怀激烈。\n三十功名尘与土，八千里路云和月。\n莫等闲，白了少年头，空悲切！\n靖康耻，犹未雪。臣子恨，何时灭！\n驾长车，踏破贺兰山缺。\n壮志饥餐胡虏肉，笑谈渴饮匈奴血。\n待从头、收拾旧山河，朝天阙。"),
    ("声声慢·寻寻觅觅", "李清照", "宋", "寻寻觅觅，冷冷清清，凄凄惨惨戚戚。\n乍暖还寒时候，最难将息。\n三杯两盏淡酒，怎敌他、晚来风急！\n雁过也，正伤心，却是旧时相识。\n满地黄花堆积，憔悴损，如今有谁堪摘？\n守着窗儿，独自怎生得黑！\n梧桐更兼细雨，到黄昏、点点滴滴。\n这次第，怎一个愁字了得！"),
    ("如梦令·昨夜雨疏风骤", "李清照", "宋", "昨夜雨疏风骤，浓睡不消残酒。\n试问卷帘人，却道海棠依旧。\n知否，知否？应是绿肥红瘦。"),
    ("一剪梅·红藕香残玉簟秋", "李清照", "宋", "红藕香残玉簟秋，轻解罗裳，独上兰舟。\n云中谁寄锦书来？雁字回时，月满西楼。\n花自飘零水自流，一种相思，两处闲愁。\n此情无计可消除，才下眉头，却上心头。"),
    ("醉花阴·薄雾浓云愁永昼", "李清照", "宋", "薄雾浓云愁永昼，瑞脑销金兽。\n佳节又重阳，玉枕纱厨，半夜凉初透。\n东篱把酒黄昏后，有暗香盈袖。\n莫道不销魂，帘卷西风，人比黄花瘦。"),
    ("夏日绝句", "李清照", "宋", "生当作人杰，死亦为鬼雄。\n至今思项羽，不肯过江东。"),
    ("武陵春·春晚", "李清照", "宋", "风住尘香花已尽，日晚倦梳头。\n物是人非事事休，欲语泪先流。\n闻说双溪春尚好，也拟泛轻舟。\n只恐双溪舴艋舟，载不动许多愁。"),
    ("渔家傲·天接云涛连晓雾", "李清照", "宋", "天接云涛连晓雾，星河欲转千帆舞。\n仿佛梦魂归帝所，闻天语，殷勤问我归何处。\n我报路长嗟日暮，学诗谩有惊人句。\n九万里风鹏正举，风休住，蓬舟吹取三山去。"),
    ("雨霖铃·寒蝉凄切", "柳永", "宋", "寒蝉凄切，对长亭晚，骤雨初歇。\n都门帐饮无绪，留恋处，兰舟催发。\n执手相看泪眼，竟无语凝噎。\n念去去，千里烟波，暮霭沉沉楚天阔。\n多情自古伤离别，更那堪冷落清秋节！\n今宵酒醒何处？杨柳岸，晓风残月。\n此去经年，应是良辰好景虚设。\n便纵有千种风情，更与何人说？"),
    ("破阵子·为陈同甫赋壮词以寄之", "辛弃疾", "宋", "醉里挑灯看剑，梦回吹角连营。\n八百里分麾下炙，五十弦翻塞外声，沙场秋点兵。\n马作的卢飞快，弓如霹雳弦惊。\n了却君王天下事，赢得生前身后名。可怜白发生！"),
    ("青玉案·元夕", "辛弃疾", "宋", "东风夜放花千树，更吹落，星如雨。\n宝马雕车香满路。\n凤箫声动，玉壶光转，一夜鱼龙舞。\n蛾儿雪柳黄金缕，笑语盈盈暗香去。\n众里寻他千百度，蓦然回首，\n那人却在，灯火阑珊处。"),
    ("永遇乐·京口北固亭怀古", "辛弃疾", "宋", "千古江山，英雄无觅孙仲谋处。\n舞榭歌台，风流总被雨打风吹去。\n斜阳草树，寻常巷陌，人道寄奴曾住。\n想当年，金戈铁马，气吞万里如虎。\n元嘉草草，封狼居胥，赢得仓皇北顾。\n四十三年，望中犹记，烽火扬州路。\n可堪回首，佛狸祠下，一片神鸦社鼓。\n凭谁问：廉颇老矣，尚能饭否？"),
    ("西江月·夜行黄沙道中", "辛弃疾", "宋", "明月别枝惊鹊，清风半夜鸣蝉。\n稻花香里说丰年，听取蛙声一片。\n七八个星天外，两三点雨山前。\n旧时茅店社林边，路转溪桥忽见。"),
    ("丑奴儿·书博山道中壁", "辛弃疾", "宋", "少年不识愁滋味，爱上层楼。\n爱上层楼，为赋新词强说愁。\n而今识尽愁滋味，欲说还休。\n欲说还休，却道天凉好个秋。"),
    ("菩萨蛮·书江西造口壁", "辛弃疾", "宋", "郁孤台下清江水，中间多少行人泪。\n西北望长安，可怜无数山。\n青山遮不住，毕竟东流去。\n江晚正愁余，山深闻鹧鸪。"),
    ("清平乐·村居", "辛弃疾", "宋", "茅檐低小，溪上青青草。\n醉里吴音相媚好，白发谁家翁媪？\n大儿锄豆溪东，中儿正织鸡笼。\n最喜小儿亡赖，溪头卧剥莲蓬。"),
    ("摸鱼儿·更能消几番风雨", "辛弃疾", "宋", "更能消、几番风雨，匆匆春又归去。\n惜春长怕花开早，何况落红无数。\n春且住，见说道、天涯芳草无归路。\n怨春不语。算只有殷勤，画檐蛛网，尽日惹飞絮。\n长门事，准拟佳期又误。蛾眉曾有人妒。\n千金纵买相如赋，脉脉此情谁诉？\n君莫舞，君不见、玉环飞燕皆尘土。\n闲愁最苦。休去倚危楼，斜阳正在，烟柳断肠处。"),
    ("南乡子·登京口北固亭有怀", "辛弃疾", "宋", "何处望神州？满眼风光北固楼。\n千古兴亡多少事？悠悠。不尽长江滚滚流。\n年少万兜鍪，坐断东南战未休。\n天下英雄谁敌手？曹刘。生子当如孙仲谋。"),
    ("生查子·元夕", "欧阳修", "宋", "去年元夜时，花市灯如昼。\n月上柳梢头，人约黄昏后。\n今年元夜时，月与灯依旧。\n不见去年人，泪湿春衫袖。"),
    ("蝶恋花·庭院深深深几许", "欧阳修", "宋", "庭院深深深几许，杨柳堆烟，帘幕无重数。\n玉勒雕鞍游冶处，楼高不见章台路。\n雨横风狂三月暮，门掩黄昏，无计留春住。\n泪眼问花花不语，乱红飞过秋千去。"),
    ("踏莎行·候馆梅残", "欧阳修", "宋", "候馆梅残，溪桥柳细，草薰风暖摇征辔。\n离愁渐远渐无穷，迢迢不断如春水。\n寸寸柔肠，盈盈粉泪，楼高莫近危阑倚。\n平芜尽处是春山，行人更在春山外。"),
    ("醉翁亭记(节选)", "欧阳修", "宋", "环滁皆山也。其西南诸峰，林壑尤美。\n望之蔚然而深秀者，琅琊也。"),
    ("木兰花", "欧阳修", "宋", "别后不知君远近，触目凄凉多少闷。\n渐行渐远渐无书，水阔鱼沉何处问。\n夜深风竹敲秋韵，万叶千声皆是恨。\n故欹单枕梦中寻，梦又不成灯又烬。"),
    ("采桑子·群芳过后西湖好", "欧阳修", "宋", "群芳过后西湖好，狼籍残红，飞絮濛濛，垂柳阑干尽日风。\n笙歌散尽游人去，始觉春空，垂下帘栊，双燕归来细雨中。"),
    ("浣溪沙·一向年光有限身", "晏殊", "宋", "一向年光有限身，等闲离别易销魂，酒筵歌席莫辞频。\n满目山河空念远，落花风雨更伤春，不如怜取眼前人。"),
    ("蝶恋花·槛菊愁烟兰泣露", "晏殊", "宋", "槛菊愁烟兰泣露，罗幕轻寒，燕子双飞去。\n明月不谙离恨苦，斜光到晓穿朱户。\n昨夜西风凋碧树，独上高楼，望尽天涯路。\n欲寄彩笺兼尺素，山长水阔知何处？"),
    ("浣溪沙·一曲新词酒一杯", "晏殊", "宋", "一曲新词酒一杯，去年天气旧亭台。\n夕阳西下几时回？\n无可奈何花落去，似曾相识燕归来。\n小园香径独徘徊。"),
    ("玉楼春·春恨", "晏殊", "宋", "绿杨芳草长亭路，年少抛人容易去。\n楼头残梦五更钟，花底离情三月雨。\n无情不似多情苦，一寸还成千万缕。\n天涯地角有穷时，只有相思无尽处。"),
    ("鹊桥仙·纤云弄巧", "秦观", "宋", "纤云弄巧，飞星传恨，银汉迢迢暗度。\n金风玉露一相逢，便胜却人间无数。\n柔情似水，佳期如梦，忍顾鹊桥归路。\n两情若是久长时，又岂在朝朝暮暮。"),
    ("踏莎行·郴州旅舍", "秦观", "宋", "雾失楼台，月迷津渡，桃源望断无寻处。\n可堪孤馆闭春寒，杜鹃声里斜阳暮。\n驿寄梅花，鱼传尺素，砌成此恨无重数。\n郴江幸自绕郴山，为谁流下潇湘去。"),
    ("满庭芳·山抹微云", "秦观", "宋", "山抹微云，天连衰草，画角声断谯门。\n暂停征棹，聊共引离尊。\n多少蓬莱旧事，空回首、烟霭纷纷。\n斜阳外，寒鸦万点，流水绕孤村。\n销魂，当此际，香囊暗解，罗带轻分。\n谩赢得、青楼薄幸名存。\n此去何时见也，襟袖上、空惹啼痕。\n伤情处，高城望断，灯火已黄昏。"),
    ("苏幕遮·碧云天", "范仲淹", "宋", "碧云天，黄叶地，秋色连波，波上寒烟翠。\n山映斜阳天接水，芳草无情，更在斜阳外。\n黯乡魂，追旅思，夜夜除非，好梦留人睡。\n明月楼高休独倚，酒入愁肠，化作相思泪。"),
    ("渔家傲·秋思", "范仲淹", "宋", "塞下秋来风景异，衡阳雁去无留意。\n四面边声连角起，千嶂里，长烟落日孤城闭。\n浊酒一杯家万里，燕然未勒归无计。\n羌管悠悠霜满地，人不寐，将军白发征夫泪。"),
    ("清平乐·红笺小字", "晏几道", "宋", "红笺小字，说尽平生意。\n鸿雁在云鱼在水，惆怅此情难寄。\n斜阳独倚西楼，遥山恰对帘钩。\n人面不知何处，绿波依旧东流。"),
    ("临江仙·梦后楼台高锁", "晏几道", "宋", "梦后楼台高锁，酒醒帘幕低垂。\n去年春恨却来时。\n落花人独立，微雨燕双飞。\n记得小蘋初见，两重心字罗衣。\n琵琶弦上说相思。\n当时明月在，曾照彩云归。"),
    ("鹧鸪天·彩袖殷勤捧玉钟", "晏几道", "宋", "彩袖殷勤捧玉钟，当年拚却醉颜红。\n舞低杨柳楼心月，歌尽桃花扇底风。\n从别后，忆相逢，几回魂梦与君同。\n今宵剩把银釭照，犹恐相逢是梦中。"),
    ("阮郎归·天边金掌露成霜", "晏几道", "宋", "天边金掌露成霜，云随雁字长。\n绿杯红袖趁重阳，人情似故乡。\n兰佩紫，菊簪黄，殷勤理旧狂。\n欲将沉醉换悲凉，清歌莫断肠。"),
    ("卜算子·我住长江头", "李之仪", "宋", "我住长江头，君住长江尾。\n日日思君不见君，共饮长江水。\n此水几时休，此恨何时已。\n只愿君心似我心，定不负相思意。"),
    ("相见欢·无言独上西楼", "李煜", "宋", "无言独上西楼，月如钩。\n寂寞梧桐深院锁清秋。\n剪不断，理还乱，是离愁。\n别是一般滋味在心头。"),
    ("虞美人·春花秋月何时了", "李煜", "宋", "春花秋月何时了？往事知多少。\n小楼昨夜又东风，故国不堪回首月明中。\n雕栏玉砌应犹在，只是朱颜改。\n问君能有几多愁？恰似一江春水向东流。"),
    ("浪淘沙令·帘外雨潺潺", "李煜", "宋", "帘外雨潺潺，春意阑珊。\n罗衾不耐五更寒。\n梦里不知身是客，一晌贪欢。\n独自莫凭栏，无限江山。\n别时容易见时难。\n流水落花春去也，天上人间。"),
    ("乌夜啼·林花谢了春红", "李煜", "宋", "林花谢了春红，太匆匆。\n无奈朝来寒雨晚来风。\n胭脂泪，相留醉，几时重。\n自是人生长恨水长东。"),
    ("蝶恋花·伫倚危楼风细细", "柳永", "宋", "伫倚危楼风细细，望极春愁，黯黯生天际。\n草色烟光残照里，无言谁会凭阑意。\n拟把疏狂图一醉，对酒当歌，强乐还无味。\n衣带渐宽终不悔，为伊消得人憔悴。"),
    ("八声甘州·对潇潇暮雨洒江天", "柳永", "宋", "对潇潇暮雨洒江天，一番洗清秋。\n渐霜风凄紧，关河冷落，残照当楼。\n是处红衰翠减，苒苒物华休。\n唯有长江水，无语东流。\n不忍登高临远，望故乡渺邈，归思难收。\n叹年来踪迹，何事苦淹留？\n想佳人妆楼颙望，误几回、天际识归舟。\n争知我，倚阑杆处，正恁凝愁！"),
    ("踏莎行·秦观", "秦观", "宋", "椰林深锁竹篱斜，一曲清歌初转咽。"),
    ("钗头凤·红酥手", "陆游", "宋", "红酥手，黄縢酒，满城春色宫墙柳。\n东风恶，欢情薄，一怀愁绪，几年离索。\n错、错、错。\n春如旧，人空瘦，泪痕红浥鲛绡透。\n桃花落，闲池阁，山盟虽在，锦书难托。\n莫、莫、莫！"),
    ("示儿", "陆游", "宋", "死去元知万事空，但悲不见九州同。\n王师北定中原日，家祭无忘告乃翁。"),
    ("游山西村", "陆游", "宋", "莫笑农家腊酒浑，丰年留客足鸡豚。\n山重水复疑无路，柳暗花明又一村。\n箫鼓追随春社近，衣冠简朴古风存。\n从今若许闲乘月，拄杖无时夜叩门。"),
    ("十一月四日风雨大作", "陆游", "宋", "僵卧孤村不自哀，尚思为国戍轮台。\n夜阑卧听风吹雨，铁马冰河入梦来。"),
    ("临安春雨初霁", "陆游", "宋", "世味年来薄似纱，谁令骑马客京华。\n小楼一夜听春雨，深巷明朝卖杏花。\n矮纸斜行闲作草，晴窗细乳戏分茶。\n素衣莫起风尘叹，犹及清明可到家。"),
    ("秋夜将晓出篱门迎凉有感", "陆游", "宋", "三万里河东入海，五千仞岳上摩天。\n遗民泪尽胡尘里，南望王师又一年。"),
    ("诉衷情·当年万里觅封侯", "陆游", "宋", "当年万里觅封侯，匹马戍梁州。\n关河梦断何处？尘暗旧貂裘。\n胡未灭，鬓先秋，泪空流。\n此生谁料，心在天山，身老沧洲。"),
    ("卜算子·咏梅", "陆游", "宋", "驿外断桥边，寂寞开无主。\n已是黄昏独自愁，更着风和雨。\n无意苦争春，一任群芳妒。\n零落成泥碾作尘，只有香如故。"),
    ("沈园二首·其一", "陆游", "宋", "城上斜阳画角哀，沈园非复旧池台。\n伤心桥下春波绿，曾是惊鸿照影来。"),
    ("沈园二首·其二", "陆游", "宋", "梦断香消四十年，沈园柳老不吹绵。\n此身行作稽山土，犹吊遗踪一泫然。"),
    ("鹊桥仙·夜闻杜鹃", "陆游", "宋", "茅檐人静，蓬窗灯暗，春晚连江风雨。"),
    ("鹧鸪天·家住苍烟落照间", "陆游", "宋", "家住苍烟落照间，丝毫尘事不相关。\n斟残玉瀣行穿竹，卷罢黄庭卧看山。\n贪啸傲，任衰残，不妨随处一开颜。\n元知造物心肠别，老却英雄似等闲。"),
    ("如梦令·常记溪亭日暮", "李清照", "宋", "常记溪亭日暮，沉醉不知归路。\n兴尽晚回舟，误入藕花深处。\n争渡，争渡，惊起一滩鸥鹭。"),
    ("渔家傲·天接云涛", "李清照", "宋", "天接云涛连晓雾，星河欲转千帆舞。"),
    ("墨梅", "王冕", "宋", "我家洗砚池头树，朵朵花开淡墨痕。\n不要人夸好颜色，只留清气满乾坤。"),
    ("泊船瓜洲", "王安石", "宋", "京口瓜洲一水间，钟山只隔数重山。\n春风又绿江南岸，明月何时照我还？"),
    ("登飞来峰", "王安石", "宋", "飞来山上千寻塔，闻说鸡鸣见日升。\n不畏浮云遮望眼，自缘身在最高层。"),
    ("元日", "王安石", "宋", "爆竹声中一岁除，春风送暖入屠苏。\n千门万户曈曈日，总把新桃换旧符。"),
    ("梅花", "王安石", "宋", "墙角数枝梅，凌寒独自开。\n遥知不是雪，为有暗香来。"),
    ("桂枝香·金陵怀古", "王安石", "宋", "登临送目，正故国晚秋，天气初肃。\n千里澄江似练，翠峰如簇。\n归帆去棹残阳里，背西风，酒旗斜矗。\n彩舟云淡，星河鹭起，画图难足。\n念往昔，繁华竞逐，叹门外楼头，悲恨相续。\n千古凭高对此，谩嗟荣辱。\n六朝旧事随流水，但寒烟衰草凝绿。\n至今商女，时时犹唱，后庭遗曲。"),
    ("书湖阴先生壁", "王安石", "宋", "茅檐长扫净无苔，花木成畦手自栽。\n一水护田将绿绕，两山排闼送青来。"),
    ("明妃曲", "王安石", "宋", "明妃初出汉宫时，泪湿春风鬓脚垂。"),
    ("春日", "朱熹", "宋", "胜日寻芳泗水滨，无边光景一时新。\n等闲识得东风面，万紫千红总是春。"),
    ("观书有感", "朱熹", "宋", "半亩方塘一鉴开，天光云影共徘徊。\n问渠那得清如许？为有源头活水来。"),
    ("水调歌头·明月几时有", "朱敦儒", "宋", "日日深杯酒满，朝朝小圃花开。"),
    ("相见欢·金陵城上西风", "朱敦儒", "宋", "金陵城上西风，倚清秋。\n万里夕阳垂地大江流。\n中原乱，簪缨散，几时收？\n试倩悲风吹泪过扬州。"),
    ("卜算子·旅雁向南飞", "朱敦儒", "宋", "旅雁向南飞，风雨群初散。\n饥渴辛勤两翅垂，独下寒汀立。"),
    ("踏莎行", "贺铸", "宋", "杨柳回塘，鸳鸯别浦，绿萍涨断莲舟路。"),
    ("青玉案", "贺铸", "宋", "凌波不过横塘路，但目送芳尘去。"),
    ("鹧鸪天·重过阊门万事非", "贺铸", "宋", "重过阊门万事非，同来何事不同归。\n梧桐半死清霜后，头白鸳鸯失伴飞。\n原上草，露初晞，旧栖新垅两依依。\n空床卧听南窗雨，谁复挑灯夜补衣。"),
    ("扬州慢·淮左名都", "姜夔", "宋", "淮左名都，竹西佳处，解鞍少驻初程。\n过春风十里，尽荠麦青青。\n自胡马窥江去后，废池乔木，犹厌言兵。\n渐黄昏，清角吹寒，都在空城。\n杜郎俊赏，算而今重到须惊。\n纵豆蔻词工，青楼梦好，难赋深情。\n二十四桥仍在，波心荡冷月无声。\n念桥边红药，年年知为谁生。"),
    ("暗香·旧时月色", "姜夔", "宋", "旧时月色，算几番照我，梅边吹笛？"),
    ("疏影·苔枝缀玉", "姜夔", "宋", "苔枝缀玉，有翠禽小小，枝上同宿。"),
    ("小重山·昨夜寒蛩不住鸣", "岳飞", "宋", "昨夜寒蛩不住鸣，惊回千里梦，已三更。\n起来独自绕阶行，人悄悄，帘外月胧明。\n白首为功名，旧山松竹老，阻归程。\n欲将心事付瑶琴，知音少，弦断有谁听。"),
    ("满庭芳·山抹微云", "秦观", "宋", "山抹微云天连衰草画角声断谯门。"),
    ("点绛唇·蹴罢秋千", "李清照", "宋", "蹴罢秋千，起来慵整纤纤手。\n露浓花瘦，薄汗轻衣透。\n见客入来，袜刬金钗溜。\n和羞走，倚门回首，却把青梅嗅。"),
    ("凤凰台上忆吹箫", "李清照", "宋", "香冷金猊，被翻红浪，起来慵自梳头。"),
    ("武陵春", "李清照", "宋", "风住尘香花已尽，日晚倦梳头。"),
    ("减字木兰花·竞渡", "黄裳", "宋", "红旗高举，飞出深深杨柳渚。\n鼓击春雷，直破烟波远远回。\n欢声震地，惊退万人争战气。\n金碧楼西，衔得锦标第一归。"),
    ("清平乐·春归何处", "黄庭坚", "宋", "春归何处？寂寞无行路。\n若有人知春去处，唤取归来同住。\n春无踪迹谁知？除非问取黄鹂。\n百啭无人能解，因风飞过蔷薇。"),
    ("鹧鸪天·座中有眉山隐客史应之和前韵", "黄庭坚", "宋", "黄菊枝头生晓寒，人生莫放酒杯干。"),
    ("水调歌头·游览", "黄庭坚", "宋", "瑶草一何碧，春入武陵溪。"),
    ("寄黄几复", "黄庭坚", "宋", "我居北海君南海，寄雁传书谢不能。\n桃李春风一杯酒，江湖夜雨十年灯。\n持家但有四立壁，治病不蕲三折肱。\n想见读书头已白，隔溪猿哭瘴溪藤。"),
    ("念奴娇·断虹霁雨", "黄庭坚", "宋", "断虹霁雨，净秋空，山染修眉新绿。"),
    ("浣溪沙·山下千林花太俗", "黄庭坚", "宋", "山下千林花太俗，山上一枝看不足。"),
    ("泊船瓜洲", "王安石", "宋", "京口瓜洲一水间，钟山只隔数重山。"),
    ("念奴娇·过洞庭", "张孝祥", "宋", "洞庭青草，近中秋，更无一点风色。\n玉鉴琼田三万顷，著我扁舟一叶。\n素月分辉，明河共影，表里俱澄澈。\n悠然心会，妙处难与君说。\n应念岭海经年，孤光自照，肝肺皆冰雪。\n短发萧骚襟袖冷，稳泛沧浪空阔。\n尽挹西江，细斟北斗，万象为宾客。\n扣舷独啸，不知今夕何夕。"),
    ("六州歌头·长淮望断", "张孝祥", "宋", "长淮望断，关塞莽然平。"),
    ("好事近·梦中作", "秦观", "宋", "春路雨添花，花动一山春色。\n行到小溪深处，有黄鹂千百。\n飞云当面化龙蛇，夭矫转空碧。\n醉卧古藤阴下，了不知南北。"),
    ("卜算子·送鲍浩然之浙东", "王观", "宋", "水是眼波横，山是眉峰聚。\n欲问行人去那边？眉眼盈盈处。\n才始送春归，又送君归去。\n若到江南赶上春，千万和春住。"),
    ("点绛唇·绍兴乙卯登绝顶小亭", "叶梦得", "宋", "缥缈危亭，笑谈独在千峰上。"),
    ("贺新郎·别茂嘉十二弟", "辛弃疾", "宋", "将军百战身名裂，向河梁回头万里。"),
    ("西江月·遣兴", "辛弃疾", "宋", "醉里且贪欢笑，要愁那得工夫。\n近来始觉古人书，信著全无是处。\n昨夜松边醉倒，问松我醉何如。\n只疑松动要来扶，以手推松曰去。"),
    ("贺新郎·甚矣吾衰矣", "辛弃疾", "宋", "甚矣吾衰矣。怅平生、交游零落，只今余几！\n我见青山多妩媚，料青山见我应如是。"),
    ("太常引·建康中秋夜为吕叔潜赋", "辛弃疾", "宋", "一轮秋影转金波，飞镜又重磨。\n把酒问姮娥：被白发、欺人奈何？\n乘风好去，长空万里，直下看山河。\n斫去桂婆娑，人道是、清光更多。"),
    ("朝天子·咏喇叭", "王磐", "宋", "喇叭，锁哪，曲儿小腔儿大。\n官船来往乱如麻，全仗你抬声价。"),
    ("画堂春·外潮莲子长参差", "秦观", "宋", "落红铺径水平池，弄晴小雨霏霏。"),
    ("扬州慢", "姜夔", "宋", "淮左名都竹西佳处解鞍少驻初程。"),
    ("踏莎行·雪似梅花", "吕本中", "宋", "雪似梅花，梅花似雪。似和不似都奇绝。\n恼人风味阿谁知？请君问取南楼月。"),
    ("采桑子·恨君不似江楼月", "吕本中", "宋", "恨君不似江楼月，南北东西。\n南北东西，只有相随无相离。\n恨君却似江楼月，暂满还亏。\n暂满还亏，待得团圆是几时。"),
    ("长相思·山一程", "纳兰性德", "清", "山一程，水一程，身向榆关那畔行，夜深千帐灯。\n风一更，雪一更，聒碎乡心梦不成，故园无此声。"),
    ("木兰花·拟古决绝词柬友", "纳兰性德", "清", "人生若只如初见，何事秋风悲画扇。\n等闲变却故人心，却道故人心易变。\n骊山语罢清宵半，泪雨霖铃终不怨。\n何如薄幸锦衣郎，比翼连枝当日愿。"),
    ("浣溪沙·谁念西风独自凉", "纳兰性德", "清", "谁念西风独自凉，萧萧黄叶闭疏窗。\n沉思往事立残阳。\n被酒莫惊春睡重，赌书消得泼茶香。\n当时只道是寻常。"),
    ("虞美人·曲阑深处重相见", "纳兰性德", "清", "曲阑深处重相见，匀泪偎人颤。"),
    ("如梦令·万帐穹庐人醉", "纳兰性德", "清", "万帐穹庐人醉，星影摇摇欲坠。"),
    ("沁园春·雪", "毛泽东", "现代", "北国风光，千里冰封，万里雪飘。\n望长城内外，惟余莽莽；大河上下，顿失滔滔。\n山舞银蛇，原驰蜡象，欲与天公试比高。\n须晴日，看红装素裹，分外妖娆。\n江山如此多娇，引无数英雄竞折腰。\n惜秦皇汉武，略输文采；唐宗宋祖，稍逊风骚。\n一代天骄，成吉思汗，只识弯弓射大雕。\n俱往矣，数风流人物，还看今朝。"),
    ("沁园春·长沙", "毛泽东", "现代", "独立寒秋，湘江北去，橘子洲头。\n看万山红遍，层林尽染；漫江碧透，百舸争流。\n鹰击长空，鱼翔浅底，万类霜天竞自由。\n怅寥廓，问苍茫大地，谁主沉浮？\n携来百侣曾游，忆往昔峥嵘岁月稠。\n恰同学少年，风华正茂；书生意气，挥斥方遒。\n指点江山，激扬文字，粪土当年万户侯。\n曾记否，到中流击水，浪遏飞舟？"),
]

class TTSReader:
    def __init__(self):
        self.available = False
        self.engine = None
        self._init_engine()

    def _init_engine(self):
        try:
            import pyttsx3
            self.engine = pyttsx3.init()
            voices = self.engine.getProperty('voices')
            chinese_voice = None
            for v in voices:
                if 'chinese' in v.name.lower() or 'zh' in v.id.lower() or 'huihui' in v.name.lower() or 'yaoyao' in v.name.lower():
                    chinese_voice = v
                    break
                if any(kw in v.name for kw in ['Microsoft Huihui', 'Microsoft Yaoyao', 'Ting-Ting', 'Sin-ji', 'Google']):
                    chinese_voice = v
                    break
            if chinese_voice:
                self.engine.setProperty('voice', chinese_voice.id)
            self.engine.setProperty('rate', 160)
            self.engine.setProperty('volume', 1.0)
            self.available = True
        except Exception:
            self.available = False

    def speak(self, text):
        if not self.available or self.engine is None:
            return False
        try:
            def _speak():
                try:
                    self.engine.say(text)
                    self.engine.runAndWait()
                except Exception:
                    pass
            t = threading.Thread(target=_speak, daemon=True)
            t.start()
            return True
        except Exception:
            return False

    def stop(self):
        if self.available and self.engine:
            try:
                self.engine.stop()
            except Exception:
                pass

    def is_available(self):
        return self.available

class PoemApp:
    COLORS = {
        'bg': '#F5F0E8',
        'sidebar_bg': '#3C2415',
        'sidebar_fg': '#E8D5B5',
        'title_fg': '#8B0000',
        'poem_fg': '#2C1810',
        'accent': '#C41E3A',
        'gold': '#B8860B',
        'link': '#4A708B',
        'hover_bg': '#E8DCC8',
        'card_bg': '#FDFBF7',
        'border': '#D4C4A8',
        'white': '#FFFFFF',
        'input_bg': '#FDFBF7',
        'button_bg': '#8B4513',
        'button_fg': '#FFFFFF',
        'tag_bg': '#FFF8DC',
        'tag_fg': '#8B4513',
        'scrollbar': '#C4A882',
    }

    def __init__(self, root):
        self.root = root
        self.root.title("诗词鉴赏 · 唐诗宋词三百首")
        self.root.geometry("1600x1000")
        self.root.minsize(900, 600)
        self.root.configure(bg=self.COLORS['bg'])
        try:
            self.root.iconname("诗词鉴赏")
        except Exception:
            pass
        self.poems = POEMS_DB
        self.filtered_poems = list(self.poems)
        self.current_poem = None
        self.current_index = -1
        self.favorites = set()
        self.tts = TTSReader()
        self.history = []
        self._load_favorites()
        self._setup_fonts()
        self._build_ui()
        self._show_welcome()

    def _setup_fonts(self):
        system = platform.system()
        if system == 'Windows':
            cn_fonts = ['Microsoft YaHei', 'SimSun', 'KaiTi', 'FangSong', 'SimHei', 'STKaiti']
        elif system == 'Darwin':
            cn_fonts = ['STKaiti', 'STSong', 'Songti SC', 'Kaiti SC', 'PingFang SC', 'Heiti SC']
        else:
            cn_fonts = ['WenQuanYi Micro Hei', 'Noto Sans CJK SC', 'Droid Sans Fallback', 'AR PL UMing CN']
        self.font_cn = cn_fonts
        import tkinter.font as tkfont
        available = tkfont.families()
        self.title_font = ('KaiTi', 28, 'bold')
        for f in cn_fonts:
            if f in available:
                self.title_font = (f, 28, 'bold')
                break
        self.subtitle_font = ('KaiTi', 14)
        for f in cn_fonts:
            if f in available:
                self.subtitle_font = (f, 14)
                break
        self.poem_font = ('FangSong', 18)
        for f in cn_fonts:
            if f in available:
                self.poem_font = (f, 18)
                break
        self.normal_font = ('Microsoft YaHei', 12)
        for f in cn_fonts:
            if f in available:
                self.normal_font = (f, 12)
                break
        self.small_font = ('Microsoft YaHei', 10)
        for f in cn_fonts:
            if f in available:
                self.small_font = (f, 10)
                break
        self.list_font = ('KaiTi', 13)
        for f in cn_fonts:
            if f in available:
                self.list_font = (f, 13)
                break

    def _build_ui(self):
        C = self.COLORS
        self.top_frame = tk.Frame(self.root, bg=C['sidebar_bg'], height=60)
        self.top_frame.pack(fill=tk.X)
        self.top_frame.pack_propagate(False)
        title_label = tk.Label(
            self.top_frame,
            text="📜  诗 词 鉴 赏  ·  唐诗宋词三百首",
            font=('KaiTi', 22, 'bold'),
            fg=C['gold'],
            bg=C['sidebar_bg'],
            pady=10
        )
        title_label.pack(side=tk.LEFT, padx=20)
        tts_status = "🔊 语音已就绪" if self.tts.is_available() else "🔇 语音未安装(pip install pyttsx3)"
        self.tts_label = tk.Label(
            self.top_frame,
            text=tts_status,
            font=self.small_font,
            fg=C['sidebar_fg'] if self.tts.is_available() else '#FF6B6B',
            bg=C['sidebar_bg']
        )
        self.tts_label.pack(side=tk.RIGHT, padx=20)
        count_label = tk.Label(
            self.top_frame,
            text=f"共收录 {len(self.poems)} 首诗词",
            font=self.small_font,
            fg=C['sidebar_fg'],
            bg=C['sidebar_bg']
        )
        count_label.pack(side=tk.RIGHT, padx=10)
        self.main_frame = tk.Frame(self.root, bg=C['bg'])
        self.main_frame.pack(fill=tk.BOTH, expand=True, padx=0, pady=0)
        self.left_panel = tk.Frame(self.main_frame, bg=C['sidebar_bg'], width=300)
        self.left_panel.pack(side=tk.LEFT, fill=tk.Y)
        self.left_panel.pack_propagate(False)
        search_frame = tk.Frame(self.left_panel, bg=C['sidebar_bg'], padx=10, pady=10)
        search_frame.pack(fill=tk.X)
        search_label = tk.Label(
            search_frame, text="🔍 搜索诗词",
            font=self.subtitle_font, fg=C['gold'], bg=C['sidebar_bg']
        )
        search_label.pack(anchor=tk.W, pady=(0, 5))
        self.search_var = tk.StringVar()
        self.search_var.trace_add('write', self._on_search)
        self.search_entry = tk.Entry(
            search_frame,
            textvariable=self.search_var,
            font=self.normal_font,
            bg=C['input_bg'],
            fg=C['poem_fg'],
            insertbackground=C['poem_fg'],
            relief=tk.FLAT,
            bd=5,
        )
        self.search_entry.pack(fill=tk.X, ipady=6)
        filter_frame = tk.Frame(self.left_panel, bg=C['sidebar_bg'], padx=10, pady=5)
        filter_frame.pack(fill=tk.X)
        self.filter_var = tk.StringVar(value="全部")
        filters = ["全部", "唐诗", "宋词", "收藏"]
        for f_text in filters:
            btn = tk.Radiobutton(
                filter_frame, text=f_text, variable=self.filter_var, value=f_text,
                font=self.small_font, fg=C['sidebar_fg'], bg=C['sidebar_bg'],
                selectcolor=C['sidebar_bg'], activebackground=C['sidebar_bg'],
                activeforeground=C['gold'], indicatoron=False,
                padx=8, pady=3, relief=tk.FLAT,
                command=self._on_filter
            )
            btn.pack(side=tk.LEFT, padx=2)
        self.result_label = tk.Label(
            self.left_panel,
            text=f"共 {len(self.poems)} 首",
            font=self.small_font,
            fg=C['sidebar_fg'],
            bg=C['sidebar_bg']
        )
        self.result_label.pack(anchor=tk.W, padx=15, pady=(5, 2))
        list_container = tk.Frame(self.left_panel, bg=C['sidebar_bg'])
        list_container.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
        self.list_canvas = tk.Canvas(
            list_container, bg=C['sidebar_bg'], highlightthickness=0,
            width=270
        )
        scrollbar = tk.Scrollbar(
            list_container, orient=tk.VERTICAL, command=self.list_canvas.yview,
            bg=C['sidebar_bg'], troughcolor=C['sidebar_bg']
        )
        scrollbar.configure(troughcolor='#2A1A0D')
        self.list_inner = tk.Frame(self.list_canvas, bg=C['sidebar_bg'])
        self.list_inner.bind(
            "<Configure>",
            lambda e: self.list_canvas.configure(scrollregion=self.list_canvas.bbox("all"))
        )
        self.list_canvas.create_window((0, 0), window=self.list_inner, anchor="nw")
        self.list_canvas.configure(yscrollcommand=scrollbar.set)
        self.list_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.list_canvas.bind("<MouseWheel>", self._on_list_scroll)
        self.list_inner.bind("<MouseWheel>", self._on_list_scroll)
        author_frame = tk.Frame(self.left_panel, bg='#2A1A0D', padx=10, pady=8)
        author_frame.pack(fill=tk.X, side=tk.BOTTOM)
        author_label = tk.Label(
            author_frame, text="👨‍🎓 热门诗人",
            font=self.small_font, fg=C['gold'], bg='#2A1A0D'
        )
        author_label.pack(anchor=tk.W, pady=(0, 5))
        hot_authors = ["李白", "杜甫", "白居易", "王维", "苏轼", "李清照", "辛弃疾"]
        author_btn_frame = tk.Frame(author_frame, bg='#2A1A0D')
        author_btn_frame.pack(fill=tk.X)
        for i, author in enumerate(hot_authors):
            btn = tk.Label(
                author_btn_frame, text=author,
                font=self.small_font, fg=C['sidebar_fg'], bg='#3C2415',
                padx=6, pady=2, cursor='hand2'
            )
            btn.pack(side=tk.LEFT, padx=2, pady=2)
            btn.bind("<Enter>", lambda e, b=btn: b.configure(bg=C['accent'], fg='white'))
            btn.bind("<Leave>", lambda e, b=btn: b.configure(bg='#3C2415', fg=C['sidebar_fg']))
            btn.bind("<Button-1>", lambda e, a=author: self._search_author(a))
        self.right_panel = tk.Frame(self.main_frame, bg=C['bg'])
        self.right_panel.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True)
        self.content_canvas = tk.Canvas(
            self.right_panel, bg=C['bg'], highlightthickness=0
        )
        content_scroll = tk.Scrollbar(
            self.right_panel, orient=tk.VERTICAL, command=self.content_canvas.yview
        )
        self.content_frame = tk.Frame(self.content_canvas, bg=C['bg'])
        self.content_frame.bind(
            "<Configure>",
            lambda e: self.content_canvas.configure(scrollregion=self.content_canvas.bbox("all"))
        )
        self.content_canvas.create_window((0, 0), window=self.content_frame, anchor="nw")
        self.content_canvas.configure(yscrollcommand=content_scroll.set)
        self.content_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
        content_scroll.pack(side=tk.RIGHT, fill=tk.Y)
        self.content_canvas.bind("<MouseWheel>", self._on_content_scroll)
        self.content_frame.bind("<MouseWheel>", self._on_content_scroll)
        self.content_canvas.bind("<Configure>", self._on_content_resize)

    def _on_content_resize(self, event):
        try:
            self.content_canvas.create_window(
                (0, 0), window=self.content_frame, anchor="nw",
                width=event.width - 20
            )
        except Exception:
            pass

    def _on_list_scroll(self, event):
        self.list_canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

    def _on_content_scroll(self, event):
        self.content_canvas.yview_scroll(int(-1 * (event.delta / 120)), "units")

    def _show_welcome(self):
        self._clear_content()
        C = self.COLORS
        welcome_title = tk.Label(
            self.content_frame,
            text="诗 词 鉴 赏",
            font=('KaiTi', 42, 'bold'),
            fg=C['title_fg'],
            bg=C['bg'],
            pady=20
        )
        welcome_title.pack(anchor=tk.CENTER, pady=(40, 0))
        sep = tk.Frame(self.content_frame, bg=C['gold'], height=2)
        sep.pack(fill=tk.X, padx=100, pady=10)
        subtitle = tk.Label(
            self.content_frame,
            text="唐诗宋词三百首 · 中华诗词文化瑰宝",
            font=self.subtitle_font,
            fg=C['gold'],
            bg=C['bg'],
            pady=5
        )
        subtitle.pack(pady=5)
        intro_text = (
            "诗词是中华文化的瑰宝，承载着千年的智慧与情感。\n"
            "从唐诗的雄浑壮丽到宋词的婉约深情，\n"
            "每一首诗词都是一段历史的回响，一种心灵的共鸣。\n\n"
            f"本系统收录 {len(self.poems)} 首经典唐诗宋词，\n"
            "支持搜索浏览、语音朗读、收藏管理等丰富功能。\n\n"
            "💡 使用提示：\n"
            "  ·  在左侧搜索框输入关键词搜索诗词\n"
            "  ·  点击诗词标题即可查看全文\n"
            "  ·  点击「朗读」按钮可语音朗读\n"
            "  ·  点击「收藏」可保存喜爱的诗词\n"
            "  ·  点击「随机」发现更多精彩诗词"
        )
        intro_label = tk.Label(
            self.content_frame,
            text=intro_text,
            font=self.normal_font,
            fg=C['poem_fg'],
            bg=C['bg'],
            justify=tk.LEFT,
            padx=40
        )
        intro_label.pack(pady=20, padx=40)
        rand_btn = tk.Button(
            self.content_frame,
            text="🎲  随机推荐一首诗词",
            font=self.subtitle_font,
            fg=C['white'],
            bg=C['accent'],
            relief=tk.FLAT,
            padx=30, pady=10,
            cursor='hand2',
            command=self._random_poem
        )
        rand_btn.pack(pady=20)
        rand_btn.bind("<Enter>", lambda e: rand_btn.configure(bg='#A01830'))
        rand_btn.bind("<Leave>", lambda e: rand_btn.configure(bg=C['accent']))
        sep2 = tk.Frame(self.content_frame, bg=C['border'], height=1)
        sep2.pack(fill=tk.X, padx=60, pady=20)
        rec_title = tk.Label(
            self.content_frame,
            text="✨ 精选推荐",
            font=('KaiTi', 18, 'bold'),
            fg=C['title_fg'],
            bg=C['bg']
        )
        rec_title.pack(pady=(0, 10))
        recommendations = [
            ("将进酒", "李白"), ("水调歌头·明月几时有", "苏轼"),
            ("声声慢·寻寻觅觅", "李清照"), ("琵琶行", "白居易"),
            ("念奴娇·赤壁怀古", "苏轼"), ("满江红·怒发冲冠", "岳飞"),
            ("锦瑟", "李商隐"), ("虞美人·春花秋月何时了", "李煜"),
            ("蜀道难", "李白"), ("长恨歌", "白居易"),
        ]
        rec_frame = tk.Frame(self.content_frame, bg=C['bg'])
        rec_frame.pack(padx=40, pady=10)
        for i, (title, author) in enumerate(recommendations):
            row = i // 2
            col = i % 2
            btn = tk.Label(
                rec_frame,
                text=f"📖 {title}  —— {author}",
                font=self.list_font,
                fg=C['link'],
                bg=C['tag_bg'],
                padx=15, pady=6,
                cursor='hand2',
                anchor=tk.W,
                relief=tk.GROOVE,
                bd=1
            )
            btn.grid(row=row, column=col, padx=8, pady=5, sticky='ew')
            btn.bind("<Enter>", lambda e, b=btn: b.configure(bg=C['hover_bg']))
            btn.bind("<Leave>", lambda e, b=btn: b.configure(bg=C['tag_bg']))
            btn.bind("<Button-1>", lambda e, t=title: self._click_rec(t))
        rec_frame.grid_columnconfigure(0, weight=1)
        rec_frame.grid_columnconfigure(1, weight=1)

    def _click_rec(self, title):
        for i, poem in enumerate(self.filtered_poems):
            if poem[0] == title:
                self._show_poem(i)
                return
        for i, poem in enumerate(self.poems):
            if poem[0] == title:
                self.filtered_poems = list(self.poems)
                self._refresh_list()
                self._show_poem(i)
                return

    def _clear_content(self):
        for widget in self.content_frame.winfo_children():
            widget.destroy()

    def _refresh_list(self):
        for widget in self.list_inner.winfo_children():
            widget.destroy()
        C = self.COLORS
        self.poem_buttons = []
        for i, poem in enumerate(self.filtered_poems):
            title, author, dynasty, _ = poem
            is_fav = i in self.favorites
            item_frame = tk.Frame(
                self.list_inner,
                bg='#2A1A0D' if i % 2 == 0 else C['sidebar_bg'],
                cursor='hand2'
            )
            item_frame.pack(fill=tk.X, padx=3, pady=1)
            fav_mark = "♥ " if is_fav else ""
            text = f"{fav_mark}{title}"
            if len(text) > 18:
                text = text[:17] + "…"
            label = tk.Label(
                item_frame,
                text=text,
                font=self.list_font,
                fg=C['gold'] if is_fav else C['sidebar_fg'],
                bg=item_frame['bg'],
                anchor=tk.W,
                padx=10, pady=5
            )
            label.pack(side=tk.LEFT, fill=tk.X, expand=True)
            author_label = tk.Label(
                item_frame,
                text=f"[{dynasty}] {author}",
                font=self.small_font,
                fg=C['sidebar_fg'],
                bg=item_frame['bg'],
                padx=5
            )
            author_label.pack(side=tk.RIGHT)
            idx = i
            for widget in [item_frame, label, author_label]:
                widget.bind("<Enter>", lambda e, f=item_frame, idx=idx: self._on_list_hover(f, True))
                widget.bind("<Leave>", lambda e, f=item_frame, idx=idx: self._on_list_hover(f, False))
                widget.bind("<Button-1>", lambda e, idx=idx: self._show_poem(idx))
                widget.bind("<MouseWheel>", self._on_list_scroll)
            self.poem_buttons.append(item_frame)
        self.result_label.config(text=f"共 {len(self.filtered_poems)} 首")

    def _on_list_hover(self, frame, enter):
        if enter:
            frame.configure(bg='#4A3020')
            for child in frame.winfo_children():
                child.configure(bg='#4A3020')
        else:
            idx = None
            for i, widget in enumerate(self.list_inner.winfo_children()):
                if widget == frame:
                    idx = i
                    break
            if idx is not None:
                bg = '#2A1A0D' if idx % 2 == 0 else self.COLORS['sidebar_bg']
            else:
                bg = self.COLORS['sidebar_bg']
            frame.configure(bg=bg)
            for child in frame.winfo_children():
                child.configure(bg=bg)

    def _show_poem(self, index):
        if index < 0 or index >= len(self.filtered_poems):
            return
        poem = self.filtered_poems[index]
        title, author, dynasty, content = poem
        self.current_poem = poem
        self.current_index = index
        if poem not in self.history:
            self.history.insert(0, poem)
            if len(self.history) > 50:
                self.history = self.history[:50]
        self._clear_content()
        C = self.COLORS
        container = tk.Frame(self.content_frame, bg=C['card_bg'], padx=40, pady=30)
        container.pack(fill=tk.BOTH, expand=True, padx=30, pady=20)
        container.configure(highlightbackground=C['border'], highlightthickness=1)
        dynasty_tag = tk.Label(
            container, text=f"〔{dynasty}〕",
            font=self.small_font, fg=C['white'], bg=C['gold'],
            padx=12, pady=2
        )
        dynasty_tag.pack(anchor=tk.W, pady=(0, 10))
        title_label = tk.Label(
            container, text=title,
            font=('KaiTi', 32, 'bold'), fg=C['title_fg'],
            bg=C['card_bg'], pady=5
        )
        title_label.pack(anchor=tk.W, pady=(0, 5))
        author_label = tk.Label(
            container, text=f"✍  {author}",
            font=self.subtitle_font, fg=C['gold'],
            bg=C['card_bg'], pady=5
        )
        author_label.pack(anchor=tk.W, pady=(0, 15))
        sep = tk.Frame(container, bg=C['gold'], height=2)
        sep.pack(fill=tk.X, pady=15, padx=20)
        lines = content.split('\n')
        poem_frame = tk.Frame(container, bg=C['card_bg'])
        poem_frame.pack(fill=tk.X, padx=20, pady=20)
        for line in lines:
            if line.strip():
                line_label = tk.Label(
                    poem_frame, text=line,
                    font=self.poem_font, fg=C['poem_fg'],
                    bg=C['card_bg'], anchor=tk.CENTER,
                    pady=4
                )
                line_label.pack(anchor=tk.CENTER, pady=2)
            else:
                tk.Frame(poem_frame, bg=C['card_bg'], height=8).pack()
        sep2 = tk.Frame(container, bg=C['border'], height=1)
        sep2.pack(fill=tk.X, padx=20, pady=20)
        btn_frame = tk.Frame(container, bg=C['card_bg'])
        btn_frame.pack(pady=10)
        is_fav = index in self.favorites
        fav_text = "💔 取消收藏" if is_fav else "♥ 收藏诗词"
        read_btn = tk.Button(
            btn_frame, text="🔊 朗读全文",
            font=self.normal_font, fg=C['white'], bg='#2E8B57',
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=lambda: self._read_poem(content)
        )
        read_btn.pack(side=tk.LEFT, padx=8)
        read_btn.bind("<Enter>", lambda e: read_btn.configure(bg='#3BA86A'))
        read_btn.bind("<Leave>", lambda e: read_btn.configure(bg='#2E8B57'))
        stop_btn = tk.Button(
            btn_frame, text="⏹ 停止朗读",
            font=self.normal_font, fg=C['white'], bg='#CD5C5C',
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=self._stop_read
        )
        stop_btn.pack(side=tk.LEFT, padx=8)
        stop_btn.bind("<Enter>", lambda e: stop_btn.configure(bg='#E06C6C'))
        stop_btn.bind("<Leave>", lambda e: stop_btn.configure(bg='#CD5C5C'))
        fav_btn = tk.Button(
            btn_frame, text=fav_text,
            font=self.normal_font,
            fg=C['white'],
            bg=C['accent'] if not is_fav else '#888888',
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=lambda: self._toggle_favorite(index)
        )
        fav_btn.pack(side=tk.LEFT, padx=8)
        fav_btn.bind("<Enter>", lambda e, b=fav_btn, f=is_fav: b.configure(bg='#A01830' if not f else '#999999'))
        fav_btn.bind("<Leave>", lambda e, b=fav_btn, f=is_fav: b.configure(bg=C['accent'] if not f else '#888888'))
        rand_btn = tk.Button(
            btn_frame, text="🎲 随机一首",
            font=self.normal_font, fg=C['white'], bg=C['button_bg'],
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=self._random_poem
        )
        rand_btn.pack(side=tk.LEFT, padx=8)
        rand_btn.bind("<Enter>", lambda e: rand_btn.configure(bg='#A0522D'))
        rand_btn.bind("<Leave>", lambda e: rand_btn.configure(bg=C['button_bg']))
        copy_btn = tk.Button(
            btn_frame, text="📋 复制全文",
            font=self.normal_font, fg=C['white'], bg='#4A708B',
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=lambda: self._copy_poem(title, author, dynasty, content)
        )
        copy_btn.pack(side=tk.LEFT, padx=8)
        copy_btn.bind("<Enter>", lambda e: copy_btn.configure(bg='#5A8A9B'))
        copy_btn.bind("<Leave>", lambda e: copy_btn.configure(bg='#4A708B'))
        home_btn = tk.Button(
            btn_frame, text="🏠 首页",
            font=self.normal_font, fg=C['white'], bg='#666666',
            relief=tk.FLAT, padx=20, pady=8, cursor='hand2',
            command=self._show_welcome
        )
        home_btn.pack(side=tk.LEFT, padx=8)
        home_btn.bind("<Enter>", lambda e: home_btn.configure(bg='#777777'))
        home_btn.bind("<Leave>", lambda e: home_btn.configure(bg='#666666'))
        nav_frame = tk.Frame(container, bg=C['card_bg'])
        nav_frame.pack(pady=15)
        if index > 0:
            prev_btn = tk.Button(
                nav_frame, text="⬅ 上一首",
                font=self.normal_font, fg=C['link'], bg=C['tag_bg'],
                relief=tk.FLAT, padx=20, pady=6, cursor='hand2',
                command=lambda: self._show_poem(index - 1)
            )
            prev_btn.pack(side=tk.LEFT, padx=10)
            prev_btn.bind("<Enter>", lambda e: prev_btn.configure(bg=C['hover_bg']))
            prev_btn.bind("<Leave>", lambda e: prev_btn.configure(bg=C['tag_bg']))
        if index < len(self.filtered_poems) - 1:
            next_btn = tk.Button(
                nav_frame, text="➡ 下一首",
                font=self.normal_font, fg=C['link'], bg=C['tag_bg'],
                relief=tk.FLAT, padx=20, pady=6, cursor='hand2',
                command=lambda: self._show_poem(index + 1)
            )
            next_btn.pack(side=tk.LEFT, padx=10)
            next_btn.bind("<Enter>", lambda e: next_btn.configure(bg=C['hover_bg']))
            next_btn.bind("<Leave>", lambda e: next_btn.configure(bg=C['tag_bg']))
        self.content_canvas.yview_moveto(0)

    def _read_poem(self, text):
        clean_text = text.replace('\n', '。').replace('，', '，').replace('。', '。')
        if not self.tts.speak(clean_text):
            self._system_speak(text)

    def _system_speak(self, text):
        system = platform.system()
        try:
            clean = text.replace('\n', ', ')
            if system == 'Windows':
                import winspeech
                winspeech.say(clean)
            elif system == 'Darwin':
                subprocess.run(['say', '-v', 'Ting-Ting', clean], timeout=30)
            elif system == 'Linux':
                subprocess.run(['espeak', '-v', 'zh', clean], timeout=30)
        except Exception:
            messagebox.showinfo("提示", "语音朗读不可用，请安装 pyttsx3:\npip install pyttsx3")

    def _stop_read(self):
        self.tts.stop()

    def _toggle_favorite(self, index):
        poem = self.filtered_poems[index]
        if index in self.favorites:
            self.favorites.remove(index)
        else:
            self.favorites.add(index)
        self._save_favorites()
        self._refresh_list()
        self._show_poem(index)

    def _save_favorites(self):
        try:
            with open('poem_favorites.txt', 'w', encoding='utf-8') as f:
                for idx in self.favorites:
                    if idx < len(self.filtered_poems):
                        poem = self.filtered_poems[idx]
                        f.write(f"{poem[0]}|{poem[1]}|{poem[2]}\n")
        except Exception:
            pass

    def _load_favorites(self):
        try:
            if os.path.exists('poem_favorites.txt'):
                with open('poem_favorites.txt', 'r', encoding='utf-8') as f:
                    fav_titles = set()
                    for line in f:
                        line = line.strip()
                        if line:
                            fav_titles.add(line)
                    for i, poem in enumerate(self.poems):
                        key = f"{poem[0]}|{poem[1]}|{poem[2]}"
                        if key in fav_titles:
                            self.favorites.add(i)
        except Exception:
            pass

    def _copy_poem(self, title, author, dynasty, content):
        text = f"{title}\n〔{dynasty}〕{author}\n\n{content}"
        self.root.clipboard_clear()
        self.root.clipboard_append(text)
        messagebox.showinfo("复制成功", "诗词已复制到剪贴板！")

    def _random_poem(self):
        if self.filtered_poems:
            idx = random.randint(0, len(self.filtered_poems) - 1)
            self._show_poem(idx)

    def _on_search(self, *args):
        keyword = self.search_var.get().strip()
        self._filter_poems(keyword)

    def _on_filter(self):
        keyword = self.search_var.get().strip()
        self._filter_poems(keyword)

    def _filter_poems(self, keyword=""):
        filter_type = self.filter_var.get()
        if filter_type == "收藏":
            result = []
            for i, poem in enumerate(self.poems):
                if i in self.favorites:
                    if not keyword or self._match_poem(poem, keyword):
                        result.append(poem)
            self.filtered_poems = result
        elif filter_type == "唐诗":
            result = []
            for poem in self.poems:
                if poem[2] == "唐" and (not keyword or self._match_poem(poem, keyword)):
                    result.append(poem)
            self.filtered_poems = result
        elif filter_type == "宋词":
            result = []
            for poem in self.poems:
                if poem[2] == "宋" and (not keyword or self._match_poem(poem, keyword)):
                    result.append(poem)
            self.filtered_poems = result
        else:
            if keyword:
                result = []
                for poem in self.poems:
                    if self._match_poem(poem, keyword):
                        result.append(poem)
                self.filtered_poems = result
            else:
                self.filtered_poems = list(self.poems)
        self._refresh_list()

    def _match_poem(self, poem, keyword):
        keyword = keyword.lower()
        title, author, dynasty, content = poem
        return (keyword in title.lower() or
                keyword in author.lower() or
                keyword in dynasty.lower() or
                keyword in content.lower())

    def _search_author(self, author):
        self.search_var.set(author)
        self._filter_poems(author)


def main():
    root = tk.Tk()
    try:
        from ctypes import windll
        windll.shcore.SetProcessDpiAwareness(1)
    except Exception:
        pass
    root.update_idletasks()
    width = 1200
    height = 800
    x = (root.winfo_screenwidth() // 2) - (width // 2)
    y = (root.winfo_screenheight() // 2) - (height // 2)
    root.geometry(f'{width}x{height}+{x}+{y}')
    app = PoemApp(root)
    app._refresh_list()
    root.mainloop()


if __name__ == "__main__":
    main()
