540 lines
70 KiB
HTML
540 lines
70 KiB
HTML
<link rel="stylesheet" href="a.css">
|
||
<link rel="stylesheet" href="b.css">
|
||
<head><style>.ͼ1.cm-focused {outline: 1px dotted #212121;}
|
||
.ͼ1 {position: relative !important; box-sizing: border-box; display: flex !important; flex-direction: column;}
|
||
.ͼ1 .cm-scroller {display: flex !important; align-items: flex-start !important; font-family: monospace; line-height: 1.4; height: 100%; overflow-x: auto; position: relative; z-index: 0; overflow-anchor: none;}
|
||
.ͼ1 .cm-content[contenteditable=true] {-webkit-user-modify: read-write-plaintext-only;}
|
||
.ͼ1 .cm-content {margin: 0; flex-grow: 2; flex-shrink: 0; display: block; white-space: pre; word-wrap: normal; box-sizing: border-box; min-height: 100%; padding: 4px 0; outline: none;}
|
||
.ͼ1 .cm-lineWrapping {white-space: pre-wrap; white-space: break-spaces; word-break: break-word; overflow-wrap: anywhere; flex-shrink: 1;}
|
||
.ͼ2 .cm-content {caret-color: black;}
|
||
.ͼ3 .cm-content {caret-color: white;}
|
||
.ͼ1 .cm-line {display: block; padding: 0 2px 0 6px;}
|
||
.ͼ1 .cm-layer > * {position: absolute;}
|
||
.ͼ1 .cm-layer {position: absolute; left: 0; top: 0; contain: size style;}
|
||
.ͼ2 .cm-selectionBackground {background: #d9d9d9;}
|
||
.ͼ3 .cm-selectionBackground {background: #222;}
|
||
.ͼ2.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground {background: #d7d4f0;}
|
||
.ͼ3.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground {background: #233;}
|
||
.ͼ1 .cm-cursorLayer {pointer-events: none;}
|
||
.ͼ1.cm-focused > .cm-scroller > .cm-cursorLayer {animation: steps(1) cm-blink 1.2s infinite;}
|
||
@keyframes cm-blink {50% {opacity: 0;}}
|
||
@keyframes cm-blink2 {50% {opacity: 0;}}
|
||
.ͼ1 .cm-cursor, .ͼ1 .cm-dropCursor {border-left: 1.2px solid black; margin-left: -0.6px; pointer-events: none;}
|
||
.ͼ1 .cm-cursor {display: none;}
|
||
.ͼ3 .cm-cursor {border-left-color: #ddd;}
|
||
.ͼ1 .cm-dropCursor {position: absolute;}
|
||
.ͼ1.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor {display: block;}
|
||
.ͼ1 .cm-iso {unicode-bidi: isolate;}
|
||
.ͼ1 .cm-announced {position: fixed; top: -10000px;}
|
||
@media print {.ͼ1 .cm-announced {display: none;}}
|
||
.ͼ2 .cm-activeLine {background-color: #cceeff44;}
|
||
.ͼ3 .cm-activeLine {background-color: #99eeff33;}
|
||
.ͼ2 .cm-specialChar {color: red;}
|
||
.ͼ3 .cm-specialChar {color: #f78;}
|
||
.ͼ1 .cm-gutters {flex-shrink: 0; display: flex; height: 100%; box-sizing: border-box; inset-inline-start: 0; z-index: 200;}
|
||
.ͼ2 .cm-gutters {background-color: #f5f5f5; color: #6c6c6c; border-right: 1px solid #ddd;}
|
||
.ͼ3 .cm-gutters {background-color: #333338; color: #ccc;}
|
||
.ͼ1 .cm-gutter {display: flex !important; flex-direction: column; flex-shrink: 0; box-sizing: border-box; min-height: 100%; overflow: hidden;}
|
||
.ͼ1 .cm-gutterElement {box-sizing: border-box;}
|
||
.ͼ1 .cm-lineNumbers .cm-gutterElement {padding: 0 3px 0 5px; min-width: 20px; text-align: right; white-space: nowrap;}
|
||
.ͼ2 .cm-activeLineGutter {background-color: #e2f2ff;}
|
||
.ͼ3 .cm-activeLineGutter {background-color: #222227;}
|
||
.ͼ1 .cm-panels {box-sizing: border-box; position: sticky; left: 0; right: 0; z-index: 300;}
|
||
.ͼ2 .cm-panels {background-color: #f5f5f5; color: black;}
|
||
.ͼ2 .cm-panels-top {border-bottom: 1px solid #ddd;}
|
||
.ͼ2 .cm-panels-bottom {border-top: 1px solid #ddd;}
|
||
.ͼ3 .cm-panels {background-color: #333338; color: white;}
|
||
.ͼ1 .cm-tab {display: inline-block; overflow: hidden; vertical-align: bottom;}
|
||
.ͼ1 .cm-widgetBuffer {vertical-align: text-top; height: 1em; width: 0; display: inline;}
|
||
.ͼ1 .cm-placeholder {color: #888; display: inline-block; vertical-align: top;}
|
||
.ͼ1 .cm-highlightSpace {background-image: radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%); background-position: center;}
|
||
.ͼ1 .cm-highlightTab {background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="200" height="20"><path stroke="%23888" stroke-width="1" fill="none" d="M1 10H196L190 5M190 15L196 10M197 4L197 16"/></svg>'); background-size: auto 100%; background-position: right 90%; background-repeat: no-repeat;}
|
||
.ͼ1 .cm-trailingSpace {background-color: #ff332255;}
|
||
.ͼ1 .cm-button {vertical-align: middle; color: inherit; font-size: 70%; padding: .2em 1em; border-radius: 1px;}
|
||
.ͼ2 .cm-button:active {background-image: linear-gradient(#b4b4b4, #d0d3d6);}
|
||
.ͼ2 .cm-button {background-image: linear-gradient(#eff1f5, #d9d9df); border: 1px solid #888;}
|
||
.ͼ3 .cm-button:active {background-image: linear-gradient(#111, #333);}
|
||
.ͼ3 .cm-button {background-image: linear-gradient(#393939, #111); border: 1px solid #888;}
|
||
.ͼ1 .cm-textfield {vertical-align: middle; color: inherit; font-size: 70%; border: 1px solid silver; padding: .2em .5em;}
|
||
.ͼ2 .cm-textfield {background-color: white;}
|
||
.ͼ3 .cm-textfield {border: 1px solid #555; background-color: inherit;}
|
||
.ͼ1 .cm-tooltip.cm-tooltip-autocomplete > ul > li, .ͼ1 .cm-tooltip.cm-tooltip-autocomplete > ul > completion-section {padding: 1px 3px; line-height: 1.2;}
|
||
.ͼ1 .cm-tooltip.cm-tooltip-autocomplete > ul > li {overflow-x: hidden; text-overflow: ellipsis; cursor: pointer;}
|
||
.ͼ1 .cm-tooltip.cm-tooltip-autocomplete > ul > completion-section {display: list-item; border-bottom: 1px solid silver; padding-left: 0.5em; opacity: 0.7;}
|
||
.ͼ1 .cm-tooltip.cm-tooltip-autocomplete > ul {font-family: monospace; white-space: nowrap; overflow: hidden auto; max-width: 700px; max-width: min(700px, 95vw); min-width: 250px; max-height: 10em; height: 100%; list-style: none; margin: 0; padding: 0;}
|
||
.ͼ2 .cm-tooltip-autocomplete ul li[aria-selected] {background: #17c; color: white;}
|
||
.ͼ2 .cm-tooltip-autocomplete-disabled ul li[aria-selected] {background: #777;}
|
||
.ͼ3 .cm-tooltip-autocomplete ul li[aria-selected] {background: #347; color: white;}
|
||
.ͼ3 .cm-tooltip-autocomplete-disabled ul li[aria-selected] {background: #444;}
|
||
.ͼ1 .cm-completionListIncompleteTop:before, .ͼ1 .cm-completionListIncompleteBottom:after {content: "···"; opacity: 0.5; display: block; text-align: center;}
|
||
.ͼ1 .cm-tooltip.cm-completionInfo {position: absolute; padding: 3px 9px; width: max-content; max-width: 400px; box-sizing: border-box; white-space: pre-line;}
|
||
.ͼ1 .cm-completionInfo.cm-completionInfo-left {right: 100%;}
|
||
.ͼ1 .cm-completionInfo.cm-completionInfo-right {left: 100%;}
|
||
.ͼ1 .cm-completionInfo.cm-completionInfo-left-narrow {right: 30px;}
|
||
.ͼ1 .cm-completionInfo.cm-completionInfo-right-narrow {left: 30px;}
|
||
.ͼ2 .cm-snippetField {background-color: #00000022;}
|
||
.ͼ3 .cm-snippetField {background-color: #ffffff22;}
|
||
.ͼ1 .cm-snippetFieldPosition {vertical-align: text-top; width: 0; height: 1.15em; display: inline-block; margin: 0 -0.7px -.7em; border-left: 1.4px dotted #888;}
|
||
.ͼ1 .cm-completionMatchedText {text-decoration: underline;}
|
||
.ͼ1 .cm-completionDetail {margin-left: 0.5em; font-style: italic;}
|
||
.ͼ1 .cm-completionIcon {font-size: 90%; width: .8em; display: inline-block; text-align: center; padding-right: .6em; opacity: 0.6; box-sizing: content-box;}
|
||
.ͼ1 .cm-completionIcon-function:after, .ͼ1 .cm-completionIcon-method:after {content: 'ƒ';}
|
||
.ͼ1 .cm-completionIcon-class:after {content: '○';}
|
||
.ͼ1 .cm-completionIcon-interface:after {content: '◌';}
|
||
.ͼ1 .cm-completionIcon-variable:after {content: '𝑥';}
|
||
.ͼ1 .cm-completionIcon-constant:after {content: '𝐶';}
|
||
.ͼ1 .cm-completionIcon-type:after {content: '𝑡';}
|
||
.ͼ1 .cm-completionIcon-enum:after {content: '∪';}
|
||
.ͼ1 .cm-completionIcon-property:after {content: '□';}
|
||
.ͼ1 .cm-completionIcon-keyword:after {content: '🔑︎';}
|
||
.ͼ1 .cm-completionIcon-namespace:after {content: '▢';}
|
||
.ͼ1 .cm-completionIcon-text:after {content: 'abc'; font-size: 50%; vertical-align: middle;}
|
||
.ͼ1 .cm-tooltip {z-index: 500; box-sizing: border-box;}
|
||
.ͼ2 .cm-tooltip {border: 1px solid #bbb; background-color: #f5f5f5;}
|
||
.ͼ2 .cm-tooltip-section:not(:first-child) {border-top: 1px solid #bbb;}
|
||
.ͼ3 .cm-tooltip {background-color: #333338; color: white;}
|
||
.ͼ1 .cm-tooltip-arrow:before, .ͼ1 .cm-tooltip-arrow:after {content: ''; position: absolute; width: 0; height: 0; border-left: 7px solid transparent; border-right: 7px solid transparent;}
|
||
.ͼ1 .cm-tooltip-above .cm-tooltip-arrow:before {border-top: 7px solid #bbb;}
|
||
.ͼ1 .cm-tooltip-above .cm-tooltip-arrow:after {border-top: 7px solid #f5f5f5; bottom: 1px;}
|
||
.ͼ1 .cm-tooltip-above .cm-tooltip-arrow {bottom: -7px;}
|
||
.ͼ1 .cm-tooltip-below .cm-tooltip-arrow:before {border-bottom: 7px solid #bbb;}
|
||
.ͼ1 .cm-tooltip-below .cm-tooltip-arrow:after {border-bottom: 7px solid #f5f5f5; top: 1px;}
|
||
.ͼ1 .cm-tooltip-below .cm-tooltip-arrow {top: -7px;}
|
||
.ͼ1 .cm-tooltip-arrow {height: 7px; width: 14px; position: absolute; z-index: -1; overflow: hidden;}
|
||
.ͼ3 .cm-tooltip .cm-tooltip-arrow:before {border-top-color: #333338; border-bottom-color: #333338;}
|
||
.ͼ3 .cm-tooltip .cm-tooltip-arrow:after {border-top-color: transparent; border-bottom-color: transparent;}
|
||
.ͼn {color: #c678dd;}
|
||
.ͼo {color: var(--md-color);}
|
||
.ͼp {color: #2d8cf0;}
|
||
.ͼq {color: #d19a66;}
|
||
.ͼr {color: #3f4a54;}
|
||
.ͼs {color: #e5c07b;}
|
||
.ͼt {color: #56b6c2;}
|
||
.ͼu {color: #2d8cf0;}
|
||
.ͼv {font-weight: bold;}
|
||
.ͼw {font-style: italic;}
|
||
.ͼx {text-decoration: line-through;}
|
||
.ͼy {color: #2d8cf0; text-decoration: underline;}
|
||
.ͼz {font-weight: bold; color: var(--md-color);}
|
||
.ͼ10 {color: #d19a66;}
|
||
.ͼ11 {color: #3f4a54;}
|
||
.ͼ12 {color: #fff;}
|
||
.ͼm {color: #3f4a54; background-color: var(--md-bk-color);}
|
||
.ͼm .cm-content {caret-color: #3f4a54;}
|
||
.ͼm .cm-cursor, .ͼm .cm-dropCursor {border-left-color: #3f4a54;}
|
||
.ͼm.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .ͼm .cm-selectionBackground, .ͼm .cm-content ::selection {background-color: #bad5fa;}
|
||
.ͼm .cm-panels {background-color: #f6f6f6; color: #3f4a54;}
|
||
.ͼm .cm-panels.cm-panels-top {border-bottom: 1px solid var(--md-border-color);}
|
||
.ͼm .cm-panels.cm-panels-bottom {border-top: 1px solid var(--md-border-color);}
|
||
.ͼm .cm-searchMatch {background-color: #72a1ff59; outline: 1px solid #457dff;}
|
||
.ͼm .cm-searchMatch.cm-searchMatch-selected {background-color: #6199ff2f;}
|
||
.ͼm .cm-activeLine {background-color: #ceedfa33;}
|
||
.ͼm .cm-selectionMatch {background-color: #aafe661a;}
|
||
.ͼm.cm-focused .cm-matchingBracket, .ͼm.cm-focused .cm-nonmatchingBracket {background-color: #bad0f847;}
|
||
.ͼm .cm-gutters {background-color: var(--md-bk-color); color: #3f4a54; border-right: 1px solid; border-color: var(--md-border-color);}
|
||
.ͼm .cm-activeLineGutter {background-color: #ceedfa33;}
|
||
.ͼm .cm-foldPlaceholder {background-color: transparent; border: none; color: #ddd;}
|
||
.ͼm .cm-tooltip {border: 1px solid var(--md-border-color); background-color: var(--md-bk-color);}
|
||
.ͼm .cm-tooltip .cm-tooltip-arrow:before {border-top-color: transparent; border-bottom-color: transparent;}
|
||
.ͼm .cm-tooltip .cm-tooltip-arrow:after {border-top-color: var(--md-bk-color); border-bottom-color: var(--md-bk-color);}
|
||
.ͼm .cm-tooltip-autocomplete > ul > li[aria-selected] {color: #3f4a54;}
|
||
.ͼ4 .cm-line ::selection, .ͼ4 .cm-line::selection {background-color: transparent !important;}
|
||
.ͼ4 .cm-line {caret-color: transparent !important;}
|
||
.ͼ4 .cm-content :focus::selection, .ͼ4 .cm-content :focus ::selection {background-color: Highlight !important;}
|
||
.ͼ4 .cm-content :focus {caret-color: initial !important;}
|
||
.ͼ4 .cm-content {caret-color: transparent !important;}
|
||
</style><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/memocard/favicon.ico"><title>开发指南</title><script defer="defer" src="/memocard/js/chunk-vendors.6381e04c.js"></script><script defer="defer" src="/memocard/js/app.dd06943e.js"></script><link href="/memocard/css/chunk-vendors.ee346564.css" rel="stylesheet"><link href="/memocard/css/app.3ab19182.css" rel="stylesheet"><style type="text/css">.medium-zoom-overlay{position:fixed;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s;will-change:opacity}.medium-zoom--opened .medium-zoom-overlay{cursor:pointer;cursor:zoom-out;opacity:1}.medium-zoom-image{cursor:pointer;cursor:zoom-in;transition:transform .3s cubic-bezier(.2,0,.2,1)!important}.medium-zoom-image--hidden{visibility:hidden}.medium-zoom-image--opened{position:relative;cursor:pointer;cursor:zoom-out;will-change:transform}</style><style type="text/css" data-primevue-style-id="base">
|
||
.p-hidden-accessible {
|
||
border: 0;
|
||
clip: rect(0 0 0 0);
|
||
height: 1px;
|
||
margin: -1px;
|
||
overflow: hidden;
|
||
padding: 0;
|
||
position: absolute;
|
||
width: 1px;
|
||
}
|
||
|
||
.p-hidden-accessible input,
|
||
.p-hidden-accessible select {
|
||
transform: scale(0);
|
||
}
|
||
|
||
.p-overflow-hidden {
|
||
overflow: hidden;
|
||
padding-right: var(--scrollbar-width);
|
||
}
|
||
</style><style type="text/css" data-primevue-style-id="baseicon">
|
||
.p-icon {
|
||
display: inline-block;
|
||
}
|
||
|
||
.p-icon-spin {
|
||
-webkit-animation: p-icon-spin 2s infinite linear;
|
||
animation: p-icon-spin 2s infinite linear;
|
||
}
|
||
|
||
@-webkit-keyframes p-icon-spin {
|
||
0% {
|
||
-webkit-transform: rotate(0deg);
|
||
transform: rotate(0deg);
|
||
}
|
||
100% {
|
||
-webkit-transform: rotate(359deg);
|
||
transform: rotate(359deg);
|
||
}
|
||
}
|
||
|
||
@keyframes p-icon-spin {
|
||
0% {
|
||
-webkit-transform: rotate(0deg);
|
||
transform: rotate(0deg);
|
||
}
|
||
100% {
|
||
-webkit-transform: rotate(359deg);
|
||
transform: rotate(359deg);
|
||
}
|
||
}
|
||
</style></head><body><noscript><strong>We're sorry but memocard doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app" data-v-app=""><body><div class="flex justify-content-center"><div class="grid w-12 md:w-10 mt-4"><div class="col-12"><!----><!----><!----><div class="p-card p-component" data-pc-name="card" data-pc-section="root"><div class="p-card-header" data-pc-section="header"><div class="relative flex justify-content-center"><div id="id-question" class="flex align-items-center justify-content-center text-3xl font-bold" contenteditable="true">开发指南</div></div></div><div class="p-card-body" data-pc-section="body"><!----><div class="p-card-content" data-pc-section="content"></div><div class="p-card-footer" data-pc-section="footer"><div id="id-answer"><div id="md-editor-v-0" class="md-editor mt-3"><div class="md-editor-toolbar-wrapper" id="md-editor-v-0-toolbar-wrapper"><div class="md-editor-toolbar"><div class="md-editor-toolbar-left"><div class="md-editor-toolbar-item" title="加粗"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bold-icon md-editor-icon"><path d="M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8"></path></svg><!----></div><div class="md-editor-toolbar-item" title="下划线"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-underline-icon md-editor-icon"><path d="M6 4v6a6 6 0 0 0 12 0V4"></path><line x1="4" x2="20" y1="20" y2="20"></line></svg><!----></div><div class="md-editor-toolbar-item" title="斜体"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-italic-icon md-editor-icon"><line x1="19" x2="10" y1="4" y2="4"></line><line x1="14" x2="5" y1="20" y2="20"></line><line x1="15" x2="9" y1="4" y2="20"></line></svg><!----></div><div class="md-editor-divider"></div><div class="md-editor-toolbar-item" title="标题"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-heading-icon md-editor-icon"><path d="M6 12h12"></path><path d="M6 20V4"></path><path d="M18 20V4"></path></svg><!----></div><div class="md-editor-dropdown md-editor-dropdown-hidden"><div class="md-editor-dropdown-overlay"><ul class="md-editor-menu" role="menu"><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">一级标题</li><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">二级标题</li><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">三级标题</li><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">四级标题</li><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">五级标题</li><li class="md-editor-menu-item md-editor-menu-item-title" role="menuitem" tabindex="0">六级标题</li></ul></div></div><div class="md-editor-toolbar-item" title="删除线"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-strikethrough-icon md-editor-icon"><path d="M16 4H9a3 3 0 0 0-2.83 4"></path><path d="M14 12a4 4 0 0 1 0 8H6"></path><line x1="4" x2="20" y1="12" y2="12"></line></svg><!----></div><div class="md-editor-toolbar-item" title="下标"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-subscript-icon md-editor-icon"><path d="m4 5 8 8"></path><path d="m12 5-8 8"></path><path d="M20 19h-4c0-1.5.44-2 1.5-2.5S20 15.33 20 14c0-.47-.17-.93-.48-1.29a2.11 2.11 0 0 0-2.62-.44c-.42.24-.74.62-.9 1.07"></path></svg><!----></div><div class="md-editor-toolbar-item" title="上标"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-superscript-icon md-editor-icon"><path d="m4 19 8-8"></path><path d="m12 19-8-8"></path><path d="M20 12h-4c0-1.5.442-2 1.5-2.5S20 8.334 20 7.002c0-.472-.17-.93-.484-1.29a2.105 2.105 0 0 0-2.617-.436c-.42.239-.738.614-.899 1.06"></path></svg><!----></div><div class="md-editor-toolbar-item" title="引用"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-quote-icon md-editor-icon"><path d="M16 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"></path><path d="M5 3a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2 1 1 0 0 1 1 1v1a2 2 0 0 1-2 2 1 1 0 0 0-1 1v2a1 1 0 0 0 1 1 6 6 0 0 0 6-6V5a2 2 0 0 0-2-2z"></path></svg><!----></div><div class="md-editor-toolbar-item" title="无序列表"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-icon md-editor-icon"><path d="M3 12h.01"></path><path d="M3 18h.01"></path><path d="M3 6h.01"></path><path d="M8 12h13"></path><path d="M8 18h13"></path><path d="M8 6h13"></path></svg><!----></div><div class="md-editor-toolbar-item" title="有序列表"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-ordered-icon md-editor-icon"><path d="M10 12h11"></path><path d="M10 18h11"></path><path d="M10 6h11"></path><path d="M4 10h2"></path><path d="M4 6h1v4"></path><path d="M6 18H4c0-1 2-2 2-3s-1-1.5-2-1"></path></svg><!----></div><div class="md-editor-toolbar-item" title="任务列表"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-todo-icon md-editor-icon"><rect x="3" y="5" width="6" height="6" rx="1"></rect><path d="m3 17 2 2 4-4"></path><path d="M13 6h8"></path><path d="M13 12h8"></path><path d="M13 18h8"></path></svg><!----></div><div class="md-editor-divider"></div><div class="md-editor-toolbar-item" title="行内代码"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-icon md-editor-icon"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg><!----></div><div class="md-editor-toolbar-item" title="块级代码"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-code-icon md-editor-icon"><path d="M10 9.5 8 12l2 2.5"></path><path d="m14 9.5 2 2.5-2 2.5"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect></svg><!----></div><div class="md-editor-toolbar-item" title="链接"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link-icon md-editor-icon"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg><!----></div><div class="md-editor-toolbar-item" title="表格"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-table-icon md-editor-icon"><path d="M12 3v18"></path><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M3 9h18"></path><path d="M3 15h18"></path></svg><!----></div><div class="md-editor-dropdown md-editor-dropdown-hidden"><div class="md-editor-dropdown-overlay"><div class="md-editor-table-shape"><div class="md-editor-table-shape-row"><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div></div><div class="md-editor-table-shape-row"><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div></div><div class="md-editor-table-shape-row"><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div></div><div class="md-editor-table-shape-row"><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div><div class="md-editor-table-shape-col"><div class="md-editor-table-shape-col-default"></div></div></div></div></div></div><div class="md-editor-toolbar-item" title="mermaid图"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chart-area-icon md-editor-icon"><path d="M3 3v16a2 2 0 0 0 2 2h16"></path><path d="M7 11.207a.5.5 0 0 1 .146-.353l2-2a.5.5 0 0 1 .708 0l3.292 3.292a.5.5 0 0 0 .708 0l4.292-4.292a.5.5 0 0 1 .854.353V16a1 1 0 0 1-1 1H8a1 1 0 0 1-1-1z"></path></svg><!----></div><div class="md-editor-dropdown md-editor-dropdown-hidden"><div class="md-editor-dropdown-overlay"><ul class="md-editor-menu" role="menu"><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">流程图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">时序图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">甘特图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">类图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">状态图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">饼图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">关系图</li><li class="md-editor-menu-item md-editor-menu-item-mermaid" role="menuitem" tabindex="0">旅程图</li></ul></div></div><div class="md-editor-toolbar-item" title="katex公式"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-square-sigma-icon md-editor-icon"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M16 8.9V7H8l4 5-4 5h8v-1.9"></path></svg><!----></div><div class="md-editor-dropdown md-editor-dropdown-hidden"><div class="md-editor-dropdown-overlay"><ul class="md-editor-menu" role="menu"><li class="md-editor-menu-item md-editor-menu-item-katex" role="menuitem" tabindex="0">行内公式</li><li class="md-editor-menu-item md-editor-menu-item-katex" role="menuitem" tabindex="0">块级公式</li></ul></div></div><div class="md-editor-divider"></div><div class="md-editor-toolbar-item" title="后退"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-reply-icon md-editor-icon"><polyline points="9 17 4 12 9 7"></polyline><path d="M20 18v-2a4 4 0 0 0-4-4H4"></path></svg><!----></div><div class="md-editor-toolbar-item" title="前进"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-forward-icon md-editor-icon"><polyline points="15 17 20 12 15 7"></polyline><path d="M4 18v-2a4 4 0 0 1 4-4h12"></path></svg><!----></div><div class="md-editor-toolbar-item" title="保存"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-save-icon md-editor-icon"><path d="M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z"></path><path d="M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7"></path><path d="M7 3v4a1 1 0 0 0 1 1h7"></path></svg><!----></div><!----></div><div class="md-editor-toolbar-right"><!----><div class="md-editor-toolbar-item" title="浏览器全屏"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2-icon md-editor-icon"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg><!----></div><div class="md-editor-toolbar-item" title="屏幕全屏"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-expand-icon md-editor-icon"><path d="m21 21-6-6m6 6v-4.8m0 4.8h-4.8"></path><path d="M3 16.2V21m0 0h4.8M3 21l6-6"></path><path d="M21 7.8V3m0 0h-4.8M21 3l-6 6"></path><path d="M3 7.8V3m0 0h4.8M3 3l6 6"></path></svg><!----></div><div class="md-editor-toolbar-item md-editor-toolbar-active" title="预览"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye-icon md-editor-icon"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg><!----></div><div class="md-editor-toolbar-item md-editor-toolbar-active" title="仅预览"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-view-icon md-editor-icon"><path d="M21 17v2a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-2"></path><path d="M21 7V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2"></path><circle cx="12" cy="12" r="1"></circle><path d="M18.944 12.33a1 1 0 0 0 0-.66 7.5 7.5 0 0 0-13.888 0 1 1 0 0 0 0 .66 7.5 7.5 0 0 0 13.888 0"></path></svg><!----></div><div class="md-editor-toolbar-item" title="html代码预览"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code-xml-icon md-editor-icon"><path d="m18 16 4-4-4-4"></path><path d="m6 8-4 4 4 4"></path><path d="m14.5 4-5 16"></path></svg><!----></div><div class="md-editor-toolbar-item" title="目录"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-list-tree-icon md-editor-icon"><path d="M21 12h-8"></path><path d="M21 6H8"></path><path d="M21 18h-8"></path><path d="M3 6v4c0 1.1.9 2 2 2h3"></path><path d="M3 10v6c0 1.1.9 2 2 2h3"></path></svg><!----></div></div></div></div><label for="md-editor-v-0-toolbar-wrapper_label" style="display: none;" aria-label="上传图片"></label><input id="md-editor-v-0-toolbar-wrapper_label" accept="image/*" type="file" multiple="" style="display: none;"><div class="md-editor-content"><div class="md-editor-content-wrapper"><div class="md-editor-input-wrapper" style="width: 0%;"><div class="cm-editor ͼ1 ͼ2 ͼ4 ͼm"><div class="cm-announced" aria-live="polite"></div><div tabindex="-1" class="cm-scroller"><div style="tab-size: 2;" spellcheck="false" autocorrect="off" autocapitalize="none" writingsuggestions="false" translate="no" contenteditable="true" class="cm-content cm-lineWrapping" role="textbox" aria-multiline="true" data-language="markdown" aria-autocomplete="list"><div class="cm-line"><span class="ͼz ͼ11">###</span><span class="ͼz"> 简介</span></div><div class="cm-line">本数据处理程序为用<span class="ͼy ͼ11">[</span><span class="ͼy">Python</span><span class="ͼy ͼ11">]</span><span class="ͼy ͼ11">(</span><span class="ͼy ͼt">https://www.runoob.com/python3/python3-tutorial.html</span><span class="ͼy ͼ11">)</span>编写的通用性框架,可以根据实际项目需求动态配置。可配置的内容在界面上展示为三部分:左侧项目树,中间数据表或图表,右侧交互按钮和输入框。项目树中的每个项目可以包含多个数据表或图表,每个数据表或图表可以对应多个按钮和输入框。配置数据存储于程序所在目录下的./config和./script和./data三个文件夹中。./config文件夹中存放<span class="ͼy ͼ11">[</span><span class="ͼy">YAML</span><span class="ͼy ͼ11">]</span><span class="ͼy ͼ11">(</span><span class="ͼy ͼt">https://www.runoob.com/w3cnote/yaml-intro.html</span><span class="ͼy ͼ11">)</span>格式配置文件,./script文件夹中存放Python脚本,./data文件夹中存放CSV格式表格数据。所有配置文件均可直接用记事本等文本编辑器直接打开查看。</div><div class="cm-line"><span class="ͼz ͼ11">###</span><span class="ͼz"> 项目树</span></div><div class="cm-line">项目树由./config/default.yml文件中tree键值配置。tree键值下可以有多个节点,每个节点有如下属性:</div><div class="cm-line"><span class="ͼ11">-</span> id (必需)标识符,必须唯一不能重复,用于写Python脚本时获取该项目</div><div class="cm-line"><span class="ͼ11">-</span> label (必需)展示在界面上的项目名称</div><div class="cm-line"><span class="ͼ11">-</span> child (可选)可包括多个子节点,每个节点同样有id、label和child属性,子节点要在YAML文件里多一级缩进</div><div class="cm-line"><span class="ͼz ͼ11">###</span><span class="ͼz"> 数据表和图表</span></div><div class="cm-line">数据表和图表由./config/default.yml文件中display键值配置。display键值下面第一级为项目id,必须和上面项目树里的id相同。项目id下可有多个数据表或图表,每个数据表或图表有如下属性:</div><div class="cm-line"><span class="ͼ11">-</span> id (必需)标识符,必须唯一。用于在Python脚本里访问该表</div><div class="cm-line"><span class="ͼ11">-</span> label (必需)展示在界面上的名称</div><div class="cm-line"><span class="ͼ11">-</span> type (必需)类型,如果为table则是数据表,如果为graph则为图表</div><div class="cm-line">数据表有如下属性:</div><div class="cm-line"><span class="ͼ11">-</span> row (可选)表格行数</div><div class="cm-line"><span class="ͼ11">-</span> col (可选)表格列数</div><div class="cm-line"><span class="ͼ11">-</span> column_header (可选)表头</div><div class="cm-line"><span class="ͼ11">-</span> data (可选)表格数据,比如</div><div class="cm-line"><span class="ͼ11">```</span><span class="ͼp">yaml</span></div><div class="cm-line"><span class="ͼr">-</span> <span class="ͼr">-</span> a</div><div class="cm-line"> <span class="ͼr">-</span> b</div><div class="cm-line"><span class="ͼr">-</span> <span class="ͼr">-</span> d</div><div class="cm-line"> <span class="ͼr">-</span> e</div><div class="cm-line"><span class="ͼ11">```</span></div><div class="cm-line">会展示为</div><div class="cm-line"><br></div><div class="cm-line">| | |</div><div class="cm-line">| - | - |</div><div class="cm-line">| a | b |</div><div class="cm-line">| c | d |</div><div class="cm-line"><br></div><div class="cm-line"><span class="ͼ11">-</span> datafile (可选)表格数据文件。与data属性数据直接存放在default.yml文件里不同,该属性为csv文件名,数据存放在./data文件夹下面的对应文件中</div><div class="cm-line"><span class="ͼ11">-</span> format_script (可选)格式脚本,存放于./script文件夹中。用于指定每个单元格中的数据格式。格式脚本中必须定义table_format函数,输入为row行号和col列号,返回为格式类型。</div><div class="cm-line"><span class="ͼ11">-</span> span (可选)用于合并单元格。span可以包含多项,每项4个数字分别是行号、列号、行跨度、列跨度。</div><div class="cm-gap" style="height: 5280px;"></div></div><div class="cm-layer cm-layer-above cm-cursorLayer" aria-hidden="true" style="z-index: 150; animation-duration: 1200ms;"><div class="cm-cursor cm-cursor-primary" style="left: 16px; top: 14.5px; height: 19px;"></div></div><div class="cm-layer cm-selectionLayer" aria-hidden="true" style="z-index: -2;"></div></div></div></div><div class="md-editor-resize-operate" style="left: 50%; display: none;"></div><div id="md-editor-v-0-preview-wrapper" class="md-editor-preview-wrapper"><div id="md-editor-v-0-preview" class="md-editor-preview default-theme md-editor-scrn"><h3 id="简介" data-line="0">简介</h3>
|
||
<p data-line="1">本数据处理程序为用<a href="https://www.runoob.com/python3/python3-tutorial.html">Python</a>编写的通用性框架,可以根据实际项目需求动态配置。可配置的内容在界面上展示为三部分:左侧项目树,中间数据表或图表,右侧交互按钮和输入框。项目树中的每个项目可以包含多个数据表或图表,每个数据表或图表可以对应多个按钮和输入框。配置数据存储于程序所在目录下的./config和./script和./data三个文件夹中。./config文件夹中存放<a href="https://www.runoob.com/w3cnote/yaml-intro.html">YAML</a>格式配置文件,./script文件夹中存放Python脚本,./data文件夹中存放CSV格式表格数据。所有配置文件均可直接用记事本等文本编辑器直接打开查看。</p>
|
||
<h3 id="项目树" data-line="2">项目树</h3>
|
||
<p data-line="3">项目树由./config/default.yml文件中tree键值配置。tree键值下可以有多个节点,每个节点有如下属性:</p>
|
||
<ul data-line="4">
|
||
<li data-line="4">id (必需)标识符,必须唯一不能重复,用于写Python脚本时获取该项目</li>
|
||
<li data-line="5">label (必需)展示在界面上的项目名称</li>
|
||
<li data-line="6">child (可选)可包括多个子节点,每个节点同样有id、label和child属性,子节点要在YAML文件里多一级缩进</li>
|
||
</ul>
|
||
<h3 id="数据表和图表" data-line="7">数据表和图表</h3>
|
||
<p data-line="8">数据表和图表由./config/default.yml文件中display键值配置。display键值下面第一级为项目id,必须和上面项目树里的id相同。项目id下可有多个数据表或图表,每个数据表或图表有如下属性:</p>
|
||
<ul data-line="9">
|
||
<li data-line="9">id (必需)标识符,必须唯一。用于在Python脚本里访问该表</li>
|
||
<li data-line="10">label (必需)展示在界面上的名称</li>
|
||
<li data-line="11">type (必需)类型,如果为table则是数据表,如果为graph则为图表<br>
|
||
数据表有如下属性:</li>
|
||
<li data-line="13">row (可选)表格行数</li>
|
||
<li data-line="14">col (可选)表格列数</li>
|
||
<li data-line="15">column_header (可选)表头</li>
|
||
<li data-line="16">data (可选)表格数据,比如</li>
|
||
</ul>
|
||
|
||
<details open="" class="md-editor-code" data-line="17">
|
||
<summary class="md-editor-code-head">
|
||
<div class="md-editor-code-flag"><span></span><span></span><span></span></div>
|
||
<div class="md-editor-code-action">
|
||
<span class="md-editor-code-lang">yaml</span>
|
||
<span data-tips="复制代码" class="md-editor-copy-button">复制代码</span>
|
||
|
||
<span class="md-editor-collapse-tips"><svg class="lucide lucide-circle-chevron-left md-editor-icon" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="24" width="24" xmlns="http://www.w3.org/2000/svg"><circle r="10" cy="12" cx="12"></circle><path d="m14 16-4-4 4-4"></path></svg></span>
|
||
</div>
|
||
</summary>
|
||
<pre><code class="language-yaml"><span class="md-editor-code-block"><span class="hljs-bullet">-</span> <span class="hljs-bullet">-</span> <span class="hljs-string">a</span>
|
||
<span class="hljs-bullet">-</span> <span class="hljs-string">b</span>
|
||
<span class="hljs-bullet">-</span> <span class="hljs-bullet">-</span> <span class="hljs-string">d</span>
|
||
<span class="hljs-bullet">-</span> <span class="hljs-string">e</span></span><span aria-hidden="true"><span></span><span></span><span></span><span></span></span></code></pre>
|
||
|
||
</details>
|
||
<p data-line="23">会展示为</p>
|
||
<table data-line="25" style="color:black">
|
||
<tbody data-line="27">
|
||
<tr data-line="27">
|
||
<td>a</td>
|
||
<td>b</td>
|
||
</tr>
|
||
<tr data-line="28">
|
||
<td>c</td>
|
||
<td>d</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<ul data-line="30">
|
||
<li data-line="30">datafile (可选)表格数据文件。与data属性数据直接存放在default.yml文件里不同,该属性为csv文件名,数据存放在./data文件夹下面的对应文件中</li>
|
||
<li data-line="31">format_script (可选)格式脚本,存放于./script文件夹中。用于指定每个单元格中的数据格式。格式脚本中必须定义table_format函数,输入为row行号和col列号,返回为格式类型。</li>
|
||
<li data-line="32">span (可选)用于合并单元格。span可以包含多项,每项4个数字分别是行号、列号、行跨度、列跨度。<br>
|
||
图表有如下属性:</li>
|
||
<li data-line="34">axis_x_title: 横轴标签</li>
|
||
<li data-line="35">axis_y_title: 纵轴标签</li>
|
||
</ul>
|
||
<h3 id="交互按钮和输入框" data-line="36">交互按钮和输入框</h3>
|
||
<p data-line="37">交互按钮和输入框由./config/default.yml文件中interact键值配置。interact键值下面第一级为数据表或图表id,必须和上面display中的id相同。数据表或图表id下可有多个交互按钮和输入框,每个交互按钮和输入框有如下属性:</p>
|
||
<ul data-line="38">
|
||
<li data-line="38">type (必需)类型,如果为button则是按钮,如果为input则是输入框</li>
|
||
<li data-line="39">label (必需)展示在界面上的名称<br>
|
||
按钮有如下属性</li>
|
||
<li data-line="41">script (可选)点击该按钮后会运行的Python脚本,Python脚本存放在./script文件夹里<br>
|
||
输入框有如下属性</li>
|
||
<li data-line="43">id (必需)标识符,必须唯一。用于在Python脚本里获取对应输入</li>
|
||
</ul>
|
||
<h3 id="Python脚本API" data-line="44">Python脚本API</h3>
|
||
<p data-line="45">目前支持对表格的读写和绘图,并不支持动态地创建或删除表格或图表。样例参见./script文件夹里已有脚本。</p>
|
||
|
||
<details class="md-editor-code" data-line="46">
|
||
<summary class="md-editor-code-head">
|
||
<div class="md-editor-code-flag"><span></span><span></span><span></span></div>
|
||
<div class="md-editor-code-action">
|
||
<span class="md-editor-code-lang">python</span>
|
||
<span data-tips="复制代码" class="md-editor-copy-button">复制代码</span>
|
||
|
||
<span class="md-editor-collapse-tips"><svg class="lucide lucide-circle-chevron-left md-editor-icon" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="24" width="24" xmlns="http://www.w3.org/2000/svg"><circle r="10" cy="12" cx="12"></circle><path d="m14 16-4-4 4-4"></path></svg></span>
|
||
</div>
|
||
</summary>
|
||
<pre><code class="language-python"><span class="md-editor-code-block"><span class="hljs-keyword">class</span> <span class="hljs-title class_">project</span>:
|
||
list_id = []
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, <span class="hljs-built_in">id</span></span>):
|
||
<span class="hljs-variable language_">self</span>.<span class="hljs-built_in">id</span> = <span class="hljs-built_in">id</span>
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__enter__</span>(<span class="hljs-params">self</span>):
|
||
project.list_id.append(<span class="hljs-variable language_">self</span>.<span class="hljs-built_in">id</span>)
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__exit__</span>(<span class="hljs-params">self, *args</span>):
|
||
project.list_id.pop()
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">sheet</span>:
|
||
list_widget = []
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, sheet_id</span>):
|
||
widget = window.widget_display.map_table[sheet_id]
|
||
<span class="hljs-variable language_">self</span>.<span class="hljs-built_in">id</span> = sheet_id
|
||
<span class="hljs-variable language_">self</span>.widget = widget
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__enter__</span>(<span class="hljs-params">self</span>):
|
||
sheet.list_widget.append(<span class="hljs-variable language_">self</span>.widget)
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__exit__</span>(<span class="hljs-params">self, *args</span>):
|
||
sheet.list_widget.pop()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">at</span>(<span class="hljs-params">self, *args</span>):
|
||
c = cell(*args, widget = <span class="hljs-variable language_">self</span>.widget)
|
||
<span class="hljs-keyword">return</span> c
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__getitem__</span>(<span class="hljs-params">self, index</span>):
|
||
<span class="hljs-keyword">if</span> <span class="hljs-built_in">type</span>(index) <span class="hljs-keyword">is</span> <span class="hljs-built_in">tuple</span>:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.at(*index)
|
||
<span class="hljs-keyword">else</span>:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.at(index)
|
||
|
||
<span class="hljs-meta"> @property</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">row</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.widget.row
|
||
|
||
<span class="hljs-meta"> @row.setter</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">row</span>(<span class="hljs-params">self, row</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.row = row
|
||
|
||
<span class="hljs-meta"> @property</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">col</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.widget.col
|
||
|
||
<span class="hljs-meta"> @col.setter</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">col</span>(<span class="hljs-params">self, col</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.col = col
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">clear</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.clear()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">clear_content</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.clearContents()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">initial</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.initial()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">reset_content</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.reset_content()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">fit_content</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.fit_content()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">load_data</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.load_data(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">dump_data</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.widget.dump_data(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">load_str</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.load_str(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">dump_str</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.widget.dump_str(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">load_file</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.load_file(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">dump_file</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.dump_file(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">cell</span>:
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, *arg, widget = <span class="hljs-literal">None</span></span>):
|
||
<span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(arg) == <span class="hljs-number">1</span>:
|
||
pos = arg[<span class="hljs-number">0</span>]
|
||
pos = pos.lower()
|
||
row = <span class="hljs-literal">None</span>
|
||
col = <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">match</span> = re.<span class="hljs-keyword">match</span>(<span class="hljs-string">r"([a-z]+)(\d+)"</span>, pos)
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">match</span>:
|
||
<span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">f"unrecognized pos: \"<span class="hljs-subst">{pos}</span>\""</span>)
|
||
row = <span class="hljs-keyword">match</span>.group(<span class="hljs-number">2</span>)
|
||
cl = <span class="hljs-keyword">match</span>.group(<span class="hljs-number">1</span>)
|
||
row = <span class="hljs-built_in">int</span>(row) - <span class="hljs-number">1</span>
|
||
col = <span class="hljs-number">0</span>
|
||
<span class="hljs-keyword">for</span> <span class="hljs-built_in">chr</span> <span class="hljs-keyword">in</span> cl:
|
||
col *= <span class="hljs-number">26</span>
|
||
col += <span class="hljs-built_in">ord</span>(<span class="hljs-built_in">chr</span>) - <span class="hljs-built_in">ord</span>(<span class="hljs-string">"a"</span>)
|
||
|
||
<span class="hljs-keyword">elif</span> <span class="hljs-built_in">len</span>(arg) == <span class="hljs-number">2</span>:
|
||
row = arg[<span class="hljs-number">0</span>]
|
||
col = arg[<span class="hljs-number">1</span>]
|
||
<span class="hljs-keyword">else</span>:
|
||
<span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">"The number of params should not be more than 2"</span>)
|
||
|
||
<span class="hljs-variable language_">self</span>.item = <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">if</span> widget <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">and</span> sheet.list_widget:
|
||
widget = sheet.list_widget[-<span class="hljs-number">1</span>]
|
||
<span class="hljs-keyword">if</span> widget:
|
||
<span class="hljs-variable language_">self</span>.item = widget.at(row, col)
|
||
|
||
<span class="hljs-meta"> @property</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">text</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.item.text
|
||
|
||
<span class="hljs-meta"> @text.setter</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">text</span>(<span class="hljs-params">self, s</span>):
|
||
<span class="hljs-variable language_">self</span>.item.text = s
|
||
|
||
<span class="hljs-meta"> @property</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">value</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.item.value
|
||
|
||
<span class="hljs-meta"> @value.setter</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">value</span>(<span class="hljs-params">self, v</span>):
|
||
<span class="hljs-variable language_">self</span>.item.value = v
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">empty</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.item.empty()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">clear</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-variable language_">self</span>.item.value = <span class="hljs-literal">None</span>
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">graph</span>:
|
||
list_widget = []
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, graph_id</span>):
|
||
widget = window.widget_display.map_graph[graph_id]
|
||
<span class="hljs-variable language_">self</span>.<span class="hljs-built_in">id</span> = graph_id
|
||
<span class="hljs-variable language_">self</span>.widget = widget
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__enter__</span>(<span class="hljs-params">self</span>):
|
||
graph.list_widget.append(<span class="hljs-variable language_">self</span>.widget)
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__exit__</span>(<span class="hljs-params">self, *args</span>):
|
||
graph.list_widget.pop()
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">plot</span>(<span class="hljs-params">self, *arg, **kwarg</span>):
|
||
<span class="hljs-variable language_">self</span>.widget.plot(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">plot</span>(<span class="hljs-params">*arg, **kwarg</span>):
|
||
widget = graph.list_widget[-<span class="hljs-number">1</span>]
|
||
widget.plot(*arg, **kwarg)
|
||
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">param</span>(<span class="hljs-params"><span class="hljs-built_in">id</span></span>):
|
||
map_input = window.widget_interact.widget_grid.map_input
|
||
result = map_input.get(<span class="hljs-built_in">id</span>)
|
||
<span class="hljs-keyword">return</span> result</span><span aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>
|
||
|
||
</details>
|
||
|
||
<details class="md-editor-code" data-line="212">
|
||
<summary class="md-editor-code-head">
|
||
<div class="md-editor-code-flag"><span></span><span></span><span></span></div>
|
||
<div class="md-editor-code-action">
|
||
<span class="md-editor-code-lang">Python</span>
|
||
<span data-tips="复制代码" class="md-editor-copy-button">复制代码</span>
|
||
|
||
<span class="md-editor-collapse-tips"><svg class="lucide lucide-circle-chevron-left md-editor-icon" stroke-linejoin="round" stroke-linecap="round" stroke-width="2" stroke="currentColor" fill="none" viewBox="0 0 24 24" height="24" width="24" xmlns="http://www.w3.org/2000/svg"><circle r="10" cy="12" cx="12"></circle><path d="m14 16-4-4 4-4"></path></svg></span>
|
||
</div>
|
||
</summary>
|
||
<pre><code class="language-Python"><span class="md-editor-code-block"><span class="hljs-keyword">class</span> <span class="hljs-title class_">string</span>:
|
||
dtype = <span class="hljs-built_in">str</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">pass</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">str2val</span>(<span class="hljs-params">self, s</span>):
|
||
<span class="hljs-keyword">return</span> s
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">val2str</span>(<span class="hljs-params">self, v</span>):
|
||
<span class="hljs-keyword">return</span> v
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">integer</span>:
|
||
dtype = <span class="hljs-built_in">int</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, fmt = <span class="hljs-string">"%d"</span></span>):
|
||
<span class="hljs-variable language_">self</span>.fmt = fmt
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">str2val</span>(<span class="hljs-params">self, s</span>):
|
||
s = s.strip()
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> s:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">try</span>:
|
||
v = <span class="hljs-built_in">int</span>(s)
|
||
<span class="hljs-keyword">except</span>:
|
||
v = <span class="hljs-built_in">int</span>(<span class="hljs-built_in">float</span>(s))
|
||
<span class="hljs-keyword">return</span> v
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">val2str</span>(<span class="hljs-params">self, v</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.fmt % v
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">decimal</span>:
|
||
dtype = <span class="hljs-built_in">float</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, fmt = <span class="hljs-string">"%.3f"</span>, epsilon = <span class="hljs-number">1e-4</span></span>):
|
||
<span class="hljs-variable language_">self</span>.fmt = fmt
|
||
<span class="hljs-variable language_">self</span>.epsilon = epsilon
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">str2val</span>(<span class="hljs-params">self, s</span>):
|
||
s = s.strip()
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> s:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">return</span> <span class="hljs-built_in">float</span>(s)
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">val2str</span>(<span class="hljs-params">self, v</span>):
|
||
<span class="hljs-keyword">if</span> <span class="hljs-built_in">abs</span>(v) < <span class="hljs-variable language_">self</span>.epsilon:
|
||
v = <span class="hljs-number">0.0</span>
|
||
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">self</span>.fmt % v
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">kdecimal</span>:
|
||
dtype = <span class="hljs-built_in">float</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self, fmt = <span class="hljs-string">"%07.3f"</span>, epsilon = <span class="hljs-number">1e-4</span></span>):
|
||
<span class="hljs-variable language_">self</span>.fmt = fmt
|
||
<span class="hljs-variable language_">self</span>.epsilon = epsilon
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">str2val</span>(<span class="hljs-params">self, s</span>):
|
||
s = s.strip()
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> s:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">match</span> = re.<span class="hljs-keyword">match</span>(<span class="hljs-string">r"[kK](\d+)\+(\d+(?:\.\d+)?)"</span>, s)
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">match</span> <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
|
||
<span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">f"pattern not matched: <span class="hljs-subst">{s}</span>"</span>)
|
||
a = <span class="hljs-keyword">match</span>.group(<span class="hljs-number">1</span>)
|
||
b = <span class="hljs-keyword">match</span>.group(<span class="hljs-number">2</span>)
|
||
<span class="hljs-keyword">return</span> <span class="hljs-built_in">float</span>(a + b)
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">val2str</span>(<span class="hljs-params">self, v</span>):
|
||
a = v // <span class="hljs-number">1000</span>
|
||
b = v % <span class="hljs-number">1000</span>
|
||
<span class="hljs-keyword">if</span> <span class="hljs-built_in">abs</span>(b - <span class="hljs-number">1000</span>) < <span class="hljs-variable language_">self</span>.epsilon:
|
||
a += <span class="hljs-number">1</span>
|
||
b = <span class="hljs-number">0.0</span>
|
||
<span class="hljs-keyword">elif</span> <span class="hljs-built_in">abs</span>(b) < <span class="hljs-variable language_">self</span>.epsilon:
|
||
b = <span class="hljs-number">0.0</span>
|
||
<span class="hljs-keyword">return</span> <span class="hljs-string">f"K%d+<span class="hljs-subst">{self.fmt}</span>"</span> % (a, b)
|
||
|
||
<span class="hljs-keyword">class</span> <span class="hljs-title class_">angle</span>:
|
||
dtype = <span class="hljs-built_in">float</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">__init__</span>(<span class="hljs-params">self</span>):
|
||
<span class="hljs-keyword">pass</span>
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">str2val</span>(<span class="hljs-params">self, s</span>):
|
||
s = s.strip()
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> s:
|
||
<span class="hljs-keyword">return</span> <span class="hljs-literal">None</span>
|
||
<span class="hljs-keyword">match</span> = re.<span class="hljs-keyword">match</span>(<span class="hljs-string">r"(\d+)°(\d+)′(\d+(?:\.\d+)?)″"</span>, s)
|
||
<span class="hljs-keyword">if</span> <span class="hljs-keyword">match</span> <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
|
||
<span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">f"pattern not matched: <span class="hljs-subst">{s}</span>"</span>)
|
||
d = <span class="hljs-built_in">int</span>(<span class="hljs-keyword">match</span>.group(<span class="hljs-number">1</span>))
|
||
m = <span class="hljs-built_in">int</span>(<span class="hljs-keyword">match</span>.group(<span class="hljs-number">2</span>))
|
||
s = <span class="hljs-built_in">float</span>(<span class="hljs-keyword">match</span>.group(<span class="hljs-number">3</span>))
|
||
<span class="hljs-keyword">return</span> dms2rad(d, m, s)
|
||
<span class="hljs-keyword">def</span> <span class="hljs-title function_">val2str</span>(<span class="hljs-params">self, v</span>):
|
||
<span class="hljs-keyword">return</span> <span class="hljs-string">"%2d°%02d′%05.2f″"</span> % rad2dms(v)</span><span aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></code></pre>
|
||
|
||
</details>
|
||
</div></div><!----></div><!----></div><div class="md-editor-footer"><div class="md-editor-footer-left"><div class="md-editor-footer-item"><label class="md-editor-footer-label">字数:</label><span>6503</span></div></div><div class="md-editor-footer-right"><!----><!----></div></div></div></div></div></div></div></div></div></div></body></div><div class="p-toast p-component p-toast-bottom-right p-ripple-disabled" style="position: fixed; right: 20px; bottom: 20px;" data-pc-name="toast" data-pc-section="root"><div data-pc-section="message"></div></div><div class="md-editor-modal-container" data-theme="light"><div style="display: none;"><div class="md-editor-modal-mask" style="z-index: -1;"></div><div class="md-editor-modal" style="z-index: -1; left: 0px; top: 0px; width: auto; height: auto;"><div class="md-editor-modal-header">添加链接</div><div class="md-editor-modal-body"><div class="md-editor-form-item"><label class="md-editor-label" for="link-desc-md-editor-v-0">链接描述:</label><input placeholder="请输入描述..." class="md-editor-input" id="link-desc-md-editor-v-0" type="text" autocomplete="off" value=""></div><div class="md-editor-form-item"><label class="md-editor-label" for="link-url-md-editor-v-0">链接地址:</label><input placeholder="请输入链接..." class="md-editor-input" id="link-url-md-editor-v-0" type="text" autocomplete="off" value=""></div><div class="md-editor-form-item"><button class="md-editor-btn md-editor-btn-row" type="button">确定</button></div></div><div class="md-editor-modal-func"><!----><div class="md-editor-modal-close"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-xicon md-editor-icon"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></div></div></div></div></div><div class="md-editor-modal-container" data-theme="light"><div class="md-editor-modal-clip" style="display: none;"><div class="md-editor-modal-mask" style="z-index: -1;"></div><div class="md-editor-modal" style="z-index: -1; left: 0px; top: 0px; width: 668px; height: 421px;"><div class="md-editor-modal-header">裁剪图片上传</div><div class="md-editor-modal-body"><div class="md-editor-form-item md-editor-clip"><div class="md-editor-clip-main"><div class="md-editor-clip-upload" role="button" tabindex="0" aria-label="上传图片"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-upload-icon md-editor-icon"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" x2="12" y1="3" y2="15"></line></svg></div></div><div class="md-editor-clip-preview"><div class="md-editor-clip-preview-target"></div></div></div><div class="md-editor-form-item"><button class="md-editor-btn" type="button">上传</button></div><input accept="image/*" type="file" style="display: none;" aria-hidden="true"></div><div class="md-editor-modal-func"><div class="md-editor-modal-adjust"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2-icon md-editor-icon"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></div><div class="md-editor-modal-close"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-xicon md-editor-icon"><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg></div></div></div></div></div></body>
|