// render block chain static void RenderBlockChain(document_rendering_context_t *cx, document_tag_t *tag) { while (tag) { document_tag_t *next = tag->next; AddBlankLine(cx); if (IsBlockElement(tag)) { // process tag with appropiate renderer switch (tag->type) { case tag_section: Render_Section(cx, (document_tag_section_t *) tag); break; case tag_p: Render_P(cx, (document_tag_p_t *) tag); break; case tag_list: Render_List(cx, (document_tag_list_t *) tag); break; case tag_dict: Render_Dict(cx, (document_tag_dict_t *) tag); break; case tag_hr: Render_Hr(cx, (document_tag_hr_t *) tag); break; case tag_pre: Render_Pre(cx, (document_tag_pre_t *) tag); break; case tag_h: Render_H(cx, (document_tag_h_t *) tag); break; default: // skip this tag break; } } else { next = RenderInlineChain(cx, tag); } AddBlankLine(cx); tag = next; } }
LTBOOL CFolderObjectives::Build() { CreateTitle(IDS_TITLE_OBJECTIVES); m_pMissionCtrl=AddTextItem(IDS_SPACER,LTNULL,0,LTTRUE, GetMediumFont()); m_pMissionCtrl->SetFixedWidth(480); m_pMissionCtrl->Enable(LTFALSE); AddBlankLine(); CLTGUITextItemCtrl* pCtrl=AddTextItem(IDS_OBJECTIVES,LTNULL,0,LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); CLTGUIFont *pFont = GetMediumFont(); m_pSpacerCtrl = CreateTextItem(" ",LTNULL,LTNULL, LTTRUE, pFont); m_pSpacerCtrl->Enable(LTFALSE); dwNumStaticControls = m_controlArray.GetSize(); return CBaseFolder::Build(); ; }
// render Section tag static void Render_Section(document_rendering_context_t *cx, document_tag_section_t *p) { if (p->indent) { cx->l_margin += DOCUMENT_INDENT; AddBlankLine(cx); } RenderBlockChain(cx, p->tags); if (p->indent) { cx->l_margin -= DOCUMENT_INDENT; AddBlankLine(cx); } }
// render HR tag static void Render_Hr(document_rendering_context_t *cx, document_tag_hr_t *hr) { int i; document_align_t old_align = cx->align; cx->align = align_center; AddBlankLine(cx); cx->line_buf[cx->line_pos++] = 29; for (i=0; i < (cx->width - cx->l_margin - cx->r_margin) / 2; i++) cx->line_buf[cx->line_pos++] = 30; cx->line_buf[cx->line_pos++] = 31; LineFeed(cx); AddBlankLine(cx); cx->align = old_align; }
// render P tag static void Render_P(document_rendering_context_t *cx, document_tag_p_t *p) { document_align_t old_align = cx->align; cx->align = p->align; if (p->indent) { cx->l_margin += DOCUMENT_INDENT; AddBlankLine(cx); } RenderBlockChain(cx, p->tags); if (p->indent) { cx->l_margin -= DOCUMENT_INDENT; AddBlankLine(cx); } cx->align = old_align; }
void CFolderMultiBriefing::OnFocus(LTBOOL bFocus) { if (bFocus) { int missionId = g_pGameClientShell->GetMPMissionName(); int briefId = g_pGameClientShell->GetMPMissionBriefing(); if (missionId) { CLTGUIFont *pFont = (briefId ? GetMediumFont() : GetLargeFont()); CLTGUITextItemCtrl* pCtrl =AddTextItem(missionId,LTNULL,0,LTTRUE,pFont); pCtrl->SetFixedWidth(480); pCtrl->Enable(LTFALSE); } if (briefId) { if (missionId) AddBlankLine(); CLTGUITextItemCtrl* pCtrl=AddTextItem(IDS_BRIEFING,LTNULL,0,LTTRUE,GetMediumFont()); pCtrl->Enable(LTFALSE); CStaticTextCtrl *pBrief = AddStaticTextItem(briefId,LTNULL,LTNULL,480,0,LTTRUE,GetSmallFont()); if (pBrief) { pBrief->Enable(LTFALSE); } } UseBack(LTFALSE); } else { RemoveFree(); } CBaseFolder::OnFocus(bFocus); }
void CFolderAwards::UpdateData() { CPlayerSummaryMgr *pPSummary = g_pGameClientShell->GetPlayerSummary(); if (!pPSummary) return; CMissionData* pMissionData = g_pInterfaceMgr->GetMissionData(); if (!pMissionData) return; int nMissionNum = pMissionData->GetMissionNum(); MISSION* pMission = g_pMissionMgr->GetMission(nMissionNum); if (!pMission) return; MISSIONSUMMARY* pMSummary = pPSummary->GetMissionSummary(nMissionNum); if (!pMSummary) return; pPSummary->ReadRankData(); RemoveFree(); CLTGUITextItemCtrl* pCtrl = LTNULL; g_pLTClient->CPrint("best:%0.2f,old best:%0.2f",pMSummary->fBestRank, pMSummary->fOldBestRank); if (pMSummary->fBestRank > pMSummary->fOldBestRank) { RANKBONUS oldBonus; RANKBONUS newBonus; pMission->GetRankBonus(pMSummary->fBestRank,&newBonus); pMission->GetRankBonus(pMSummary->fOldBestRank,&oldBonus); if (newBonus.nPerturbPoints > oldBonus.nPerturbPoints) { pCtrl = AddTextItem(IDS_BONUS_PERTURB,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nAmmoPoints > oldBonus.nAmmoPoints) { pCtrl = AddTextItem(IDS_BONUS_AMMO,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nArmorPoints > oldBonus.nArmorPoints) { pCtrl = AddTextItem(IDS_BONUS_ARMOR,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nDamagePoints > oldBonus.nDamagePoints) { pCtrl = AddTextItem(IDS_BONUS_DAMAGE,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nHealthPoints > oldBonus.nHealthPoints) { pCtrl = AddTextItem(IDS_BONUS_HEALTH,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nReputationPoints > oldBonus.nReputationPoints) { pCtrl = AddTextItem(IDS_BONUS_REPUTATION,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } if (newBonus.nStealthPoints > oldBonus.nStealthPoints) { pCtrl = AddTextItem(IDS_BONUS_STEALTH,LTNULL,0, LTTRUE, GetMediumFont()); pCtrl->Enable(LTFALSE); } } if (pCtrl) AddBlankLine(); // Generate Awards if (pMission->bAllowAwards) { MISSIONAWARDS *pAwards = g_pMissionMgr->GetMissionAwards(); int awardNum = 0; pCtrl = AddTextItem(IDS_AWARDS,LTNULL,0, LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); if (pAwards->nNumHighAmmoAwards && pMission->nHighAmmo > -1 && pMSummary->dwNumShotsFired >= (uint32)pMission->nHighAmmo) { awardNum = GetRandom(0,pAwards->nNumHighAmmoAwards-1); pCtrl = AddTextItem(pAwards->aHighAmmoAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } if (pAwards->nNumLowAmmoAwards && pMission->nLowAmmo > -1 && pMSummary->dwNumShotsFired <= (uint32)pMission->nLowAmmo) { awardNum = GetRandom(0,pAwards->nNumLowAmmoAwards-1); pCtrl = AddTextItem(pAwards->aLowAmmoAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } LTFLOAT fAccuracy = 0.0f; if (pMSummary->dwNumShotsFired) { fAccuracy = (LTFLOAT) pMSummary->dwNumHits / (LTFLOAT) pMSummary->dwNumShotsFired; } if (pAwards->nNumAccuracyAwards && fAccuracy > pAwards->fAccuracyPct) { awardNum = GetRandom(0,pAwards->nNumAccuracyAwards-1); pCtrl = AddTextItem(pAwards->aAccuracyAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } if (pAwards->nNumMarksmanAwards && pMSummary->dwNumShotsFired) { LTFLOAT fMarksman = (LTFLOAT) pMSummary->dwHitLocations[HL_HEAD] / (LTFLOAT) pMSummary->dwNumShotsFired; if (fMarksman > pAwards->fMarksmanPct) { awardNum = GetRandom(0,pAwards->nNumMarksmanAwards-1); pCtrl = AddTextItem(pAwards->aMarksmanAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } } if (pAwards->nNumNonInjuryAwards && g_pInterfaceMgr->GetPlayerStats()->GetMissionDamage() == 0) { awardNum = GetRandom(0,pAwards->nNumNonInjuryAwards-1); pCtrl = AddTextItem(pAwards->aNonInjuryAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } if (pAwards->nNumNotShotAwards && pMSummary->dwNumTimesHit == 0) { awardNum = GetRandom(0,pAwards->nNumNotShotAwards-1); pCtrl = AddTextItem(pAwards->aNotShotAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } if (pAwards->nNumStealthAwards && pMission->nMaxDetect > -1 && (pMSummary->dwNumTimesDetected + pMSummary->dwNumBodies) <= (uint32)pMission->nMaxDetect) { awardNum = GetRandom(0,pAwards->nNumStealthAwards-1); pCtrl = AddTextItem(pAwards->aStealthAwards[awardNum],LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } } }
// Change in focus void CFolderWeaponControls::OnFocus(LTBOOL bFocus) { if (bFocus) { nLastId = WMGR_INVALID_ID; ReadBindings(); CLTGUIColumnTextCtrl *pCtrl=AddColumnText(LTNULL, LTNULL, LTTRUE, GetMediumFont()); HSTRING hText = g_pLTClient->FormatString(IDS_KEY); pCtrl->AddColumn(hText, 50, LTF_JUSTIFY_LEFT); g_pLTClient->FreeString(hText); hText = g_pLTClient->FormatString(IDS_WEAPON); pCtrl->AddColumn(hText, kWidth, LTF_JUSTIFY_LEFT); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hText); // AddBlankLine(); for (int i = 0; i < 10; i++) { pCtrl=AddColumnText(LTNULL, IDS_HELP_SETWEAPON, LTFALSE, GetSmallFont()); pCtrl->SetParam1(i+1); char str[16]; sprintf(str," %s",szTriggers[i]); hText = g_pLTClient->CreateString(str); pCtrl->AddColumn(hText, 50, LTF_JUSTIFY_LEFT); g_pLTClient->FreeString(hText); int nWeaponId = g_pWeaponMgr->GetWeaponId(m_nActions[i]); WEAPON *pWeapon = g_pWeaponMgr->GetWeapon(nWeaponId); if (pWeapon) pCtrl->AddColumn(pWeapon->nNameId, kWidth, LTF_JUSTIFY_LEFT); else pCtrl->AddColumn(IDS_CONTROL_UNASSIGNED, kWidth, LTF_JUSTIFY_LEFT); } AddBlankLine(); m_bLargeIcon = (GetConsoleInt("BindingIconSize",0) > 0); CToggleCtrl *pToggle = AddToggle(IDS_WPN_ICON_SZ,IDS_HELP_WPN_ICON_SZ, kWidth, &m_bLargeIcon,LTFALSE,GetSmallFont()); pToggle->SetOnString(IDS_LARGE); pToggle->SetOffString(IDS_SMALL); m_nIconAlpha = (int)(GetConsoleFloat("BindingIconAlpha",0.7f) * 10.0f); CSliderCtrl *pSlider = AddSlider(IDS_WPN_ICON_A,IDS_HELP_WPN_ICON_A,kWidth,kSlider,&m_nIconAlpha,LTFALSE,GetSmallFont()); pSlider->SetSliderIncrement(1); pSlider->SetSliderRange(0,10); m_bUseNumbers = (GetConsoleInt("BindingNumbers",1) > 0); pToggle = AddToggle(IDS_WPN_USE_NUMS,IDS_HELP_WPN_USE_NUMS, kWidth, &m_bUseNumbers,LTFALSE,GetSmallFont()); pToggle->SetOnString(IDS_YES); pToggle->SetOffString(IDS_NO); UpdateData(LTFALSE); } else { UpdateData(); WriteConsoleInt("BindingIconSize",m_bLargeIcon); WriteConsoleInt("BindingNumbers",m_bUseNumbers); WriteConsoleFloat("BindingIconAlpha",((LTFLOAT)m_nIconAlpha) / 10.0f); WriteBindings(); g_pInterfaceMgr->GetPlayerStats()->UpdateWeaponBindings(); // Just to be safe save the config incase anything changed... g_pLTClient->WriteConfigFile("autoexec.cfg"); RemoveFree(); } CBaseFolder::OnFocus(bFocus); if (bFocus) UpdateSelection(); }
// Build the folder LTBOOL CFolderPlayer::Build() { CreateTitle(IDS_TITLE_PLAYER_SETUP); g_vtPlayerModel.Init(g_pLTClient, "NetPlayerModel", "Hero,action", 0.0f); g_vtPlayerTeam.Init(g_pLTClient, "NetPlayerTeam", LTNULL, 0.0f); g_vtTargetNameTransparency.Init(g_pLTClient, "TargetNameTransparency", LTNULL, 1.0f); g_vtTargetNameSize.Init(g_pLTClient, "TargetNameSize", LTNULL, 0.0f); m_pLabel = CreateTextItem(IDS_PLAYER_NAME, CMD_EDIT_NAME, IDS_HELP_PLAYER_NAME); m_pEdit = CreateEditCtrl(" ", CMD_EDIT_NAME, LTNULL, m_szPlayerName, sizeof(m_szPlayerName), 25, LTTRUE, GetMediumFont()); m_pEdit->EnableCursor(); m_pEdit->Enable(LTFALSE); m_pEdit->SetAlignment(LTF_JUSTIFY_CENTER); m_pNameGroup = AddGroup(640,m_pLabel->GetHeight(),IDS_HELP_PLAYER_NAME); LTIntPt offset(0,0); m_pNameGroup->AddControl(m_pLabel,offset,LTTRUE); offset.x = 200; m_pNameGroup->AddControl(m_pEdit,offset,LTFALSE); AddBlankLine(); CToggleCtrl* pToggle = AddToggle(IDS_AUTOSWITCH_WEAPONS, IDS_HELP_AUTOSWITCH_WEAPONS, 225, &m_bAutoSwitchWeapons ); pToggle->SetOnString(IDS_ON); pToggle->SetOffString(IDS_OFF); pToggle = AddToggle(IDS_AUTOSWITCH_AMMO, IDS_HELP_AUTOSWITCH_AMMO, 225, &m_bAutoSwitchAmmo ); pToggle->SetOnString(IDS_ON); pToggle->SetOffString(IDS_OFF); pToggle = AddToggle(IDS_IGNORE_TAUNTS, IDS_HELP_IGNORE_TAUNTS, 225, &m_bIgnoreTaunts ); pToggle->SetOnString(IDS_YES); pToggle->SetOffString(IDS_NO); CCycleCtrl *pCycle = AddCycleItem(IDS_CONNECT_SPEED,IDS_CONNECT_SPEED,200,25,&m_nConnect); pCycle->AddString(IDS_CONNECT_VSLOW); pCycle->AddString(IDS_CONNECT_SLOW); pCycle->AddString(IDS_CONNECT_MEDIUM); pCycle->AddString(IDS_CONNECT_FAST); pCycle = AddCycleItem(IDS_PLAYER_TEAM,IDS_HELP_PLAYER_TEAM,200,25,&m_nTeam); pCycle->AddString(IDS_PLAYER_EITHER); pCycle->AddString(IDS_PLAYER_UNITY); pCycle->AddString(IDS_PLAYER_HARM); CSliderCtrl* pSlider = AddSlider(IDS_TARGETNAMETRANSPARENCY, IDS_TARGETNAMETRANSPARENCY_HELP, 225, 200, &m_nTargetNameTransparency); pSlider->SetSliderRange(0, 100); pSlider->SetSliderIncrement(5); pCycle = AddCycleItem(IDS_TARGETNAMESIZE,IDS_TARGETNAMESIZE_HELP,200,25,&m_nTargetNameSize); pCycle->AddString(IDS_SMALL); pCycle->AddString(IDS_MEDIUM); pCycle->AddString(IDS_LARGE); m_pModelCtrl = AddCycleItem(IDS_PLAYER_MODEL,IDS_HELP_PLAYER_MODEL,200,25,&m_nModNum); m_pModelCtrl->NotifyOnChange(CMD_MODEL_CHANGE,this); m_pSkinCtrl = AddCycleItem(IDS_PLAYER_SKIN,IDS_HELP_PLAYER_SKIN,200,25,&m_nSkinNum); m_pSkinCtrl->NotifyOnChange(CMD_SKIN_CHANGE,this); m_pHeadCtrl = AddCycleItem(IDS_PLAYER_HEAD,IDS_HELP_PLAYER_HEAD,200,25,&m_nHeadNum); m_pHeadCtrl->NotifyOnChange(CMD_HEAD_CHANGE,this); // Make sure to call the base class if (! CBaseFolder::Build()) return LTFALSE; UseBack(LTTRUE,LTTRUE); return LTTRUE; }
void CFolderStats::UpdateData() { CPlayerSummaryMgr *pPSummary = g_pGameClientShell->GetPlayerSummary(); if (!pPSummary) return; CMissionData* pMissionData = g_pInterfaceMgr->GetMissionData(); if (!pMissionData) return; int nMissionNum = pMissionData->GetMissionNum(); MISSION* pMission = g_pMissionMgr->GetMission(nMissionNum); MISSIONSUMMARY* pMSummary = pPSummary->GetMissionSummary(nMissionNum); pPSummary->ReadRankData(); RemoveFree(); CLTGUITextItemCtrl* pCtrl = LTNULL; HSTRING hTxt = LTNULL; //time in mission char str[128]; LTFLOAT fSec = pMSummary->fTotalMissionTime; uint32 nMin = (uint32)fSec / 60; fSec -= (60.0f * (LTFLOAT)nMin); uint32 nHour = nMin / 60; nMin -= 60 * nHour; sprintf(str,"%02d:%02d:%.1f",nHour,nMin,fSec); hTxt=g_pLTClient->FormatString(IDS_STAT_TIME,str); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); AddBlankLine(); //accuracy pCtrl = AddTextItem(IDS_STAT_ACCURACY,LTNULL,0,LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); LTFLOAT fAccuracy = 0.0f; if (pMSummary->dwNumShotsFired) { fAccuracy = (LTFLOAT) pMSummary->dwNumHits / (LTFLOAT) pMSummary->dwNumShotsFired; int nAccuracy =(int)( 100.0f * fAccuracy); //shots fired hTxt=g_pLTClient->FormatString(IDS_STAT_SHOTS, pMSummary->dwNumShotsFired,pMSummary->dwNumHits, nAccuracy); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); //hit locations uint32 h = pMSummary->dwHitLocations[HL_HEAD]; uint32 t = pMSummary->dwHitLocations[HL_TORSO]; uint32 a = pMSummary->dwHitLocations[HL_ARM]; uint32 l = pMSummary->dwHitLocations[HL_LEG]; hTxt=g_pLTClient->FormatString(IDS_STAT_HITS,h,t,(a+l)); pCtrl= AddTextItem(hTxt,LTNULL,0,LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); AddBlankLine(); // casualties pCtrl = AddTextItem(IDS_STAT_CASUALTIES,LTNULL,0, LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); hTxt=g_pLTClient->FormatString(IDS_STAT_KILLS, pMSummary->dwNumEnemyKills, pMSummary->dwNumFriendKills, pMSummary->dwNumNeutralKills); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); } else { hTxt=g_pLTClient->FormatString(IDS_STAT_NOSHOTS); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); } AddBlankLine(); //stealth pCtrl = AddTextItem(IDS_STAT_STEALTH,LTNULL,0, LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); hTxt=g_pLTClient->FormatString(IDS_STAT_DETECTED,pMSummary->dwNumTimesDetected,pMSummary->dwNumDisturbances); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); hTxt=g_pLTClient->FormatString(IDS_STAT_DETECTED2,pMSummary->dwNumBodies,pMSummary->dwNumTimesHit); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); g_pLTClient->FreeString(hTxt); AddBlankLine(); //inteligence int cur = pMSummary->m_nMissionCurNumIntel; if (cur) { pCtrl = AddTextItem(IDS_STAT_INTEL,LTNULL,0, LTTRUE, GetLargeFont()); pCtrl->Enable(LTFALSE); hTxt=g_pLTClient->FormatString(IDS_STAT_FOUND,cur); pCtrl= AddTextItem(hTxt,LTNULL,0, LTTRUE, GetSmallFont()); pCtrl->Enable(LTFALSE); } if (cur || pMSummary->m_nMissionMaxIntel) AddTextItem(IDS_VIEW_GALLERY,CMD_INTEL,IDS_HELP_VIEW_GALLERY, LTFALSE, GetSmallFont()); CalculateLastDrawn(); CheckArrows(); }
// render LIST tag static void Render_Dict(document_rendering_context_t *cx, document_tag_dict_t *dict) { char separator[128]; int indent; document_tag_di_t *item; int item_num; int num_width = 0; // first check, how much indentation we should use indent = 2; if (dict->separator != list_separator_none) indent++; switch (dict->bullet) { case list_bullet_none: break; case list_bullet_dot: case list_bullet_letter: case list_bullet_bigletter: indent++; break; case list_bullet_number: { // count dict size item_num = 0; item = dict->items; while (item) { item_num++; item = (document_tag_di_t *) item->next; } if (item_num == 0) break; num_width = log10(item_num) + 1; indent += num_width; } } cx->list_count++; cx->l_margin += indent; AddBlankLine(cx); item = dict->items; item_num = 1; while (item) { int old_do_color; // make separator strlcpy(separator, " ", sizeof (separator)); switch (dict->bullet) { case list_bullet_none: break; case list_bullet_dot: strlcat(separator, va("%c", (cx->list_count%2) ? 143 : 15), sizeof (separator)); break; case list_bullet_letter: strlcat(separator, va("%c", (item_num % ('z'-'a'+1)) + 'a'), sizeof (separator)); break; case list_bullet_bigletter: strlcat(separator, va("%c", (item_num % ('Z'-'A'+1)) + 'A'), sizeof (separator)); break; case list_bullet_number: strlcat(separator, va("%*d", num_width, item_num), sizeof (separator)); break; } switch (dict->separator) { case list_separator_none: break; case list_separator_dot: strlcat(separator, ".", sizeof (separator)); break; case list_separator_par: strlcat(separator, ")", sizeof (separator)); break; } strlcat(separator, " ", sizeof (separator)); memcpy(cx->line_buf + (cx->l_margin - indent), separator, strlen(separator)); old_do_color = cx->do_color; cx->do_color = 1; RenderBlockChain(cx, item->name); cx->do_color = old_do_color; // render description cx->l_margin += 2; AddBlankLine(cx); RenderBlockChain(cx, item->description); cx->l_margin -= 2; AddBlankLine(cx); item_num++; item = (document_tag_di_t *) item->next; } cx->l_margin -= indent; AddBlankLine(cx); cx->list_count--; }
// render PRE tag static void Render_Pre(document_rendering_context_t *cx, document_tag_pre_t *pre) { int l_width, width; char *text, *s, *d; if (!pre->text) return; // duplicate text and calculate width width = l_width = 0; s = pre->text; d = text = (char *) Q_malloc(strlen(s)+1); while (*s) { char c = *s++; // skip LF and TAB if (c == '\r' || c == '\t') continue; // copy character to output *d++ = c=='\n' ? '\n'+128 : c; // check line width if (c == '\n') { if (l_width > width) width = l_width; l_width = 0; } else { l_width++; } } *d = 0; // check if our render context width allow for such image if (width <= cx->width - cx->l_margin - cx->r_margin - 1) { // render inline document_align_t align; int offset; // remporarily disable alignment, because we use our own align = cx->align; cx->align = align_left; // calculate alignment offset switch (align) { default: case align_left: offset = 0; break; case align_right: offset = cx->width - cx->l_margin - cx->r_margin - width - 1; break; case align_center: offset = (cx->width - cx->l_margin - cx->r_margin - width - 1) / 2; break; } cx->l_margin += offset; AddBlankLine(cx); Render_String(cx, text); cx->l_margin -= offset; AddBlankLine(cx); cx->align = align; } else { // render as link char *t = Q_strdup(""); t = Add_Inline_String(t, "\x90"); t = Add_Inline_String(t, pre->alt ? pre->alt : "picture"); t = Add_Inline_String(t, "\x91"); Render_String(cx, t); Q_free(t); } Q_free(text); }