David McClosky avatar David McClosky committed 60e5346

- Fix compilation errors.
- Drop the first-stage/*/Makefile.dep files from the repository.
- Remove broken PARSE/Wrd.h substBracket() method, replace with new escape_parens function (which has been moved to PARSE/utils).
- Remove some cruft in PARSE/utils.*

Comments (0)

Files changed (9)

first-stage/PARSE/BchartSm.C

 {
   //return 1.0  //ADD to IGNORE hypenization for unknown words
   bool hyp = false;
-  char* hyppos =  strpbrk(shU.c_str(), "-");
-  if(hyppos) hyp = true;
+  const char* hyppos = strpbrk(shU.c_str(), "-");
+  if (hyppos) hyp = true;
   double phyp = pHhypgt(t);  
   return hyp ? phyp : (1 - phyp);
 }

first-stage/PARSE/Makefile.dep

-AnsHeap.o: AnsHeap.C AnsHeap.h AnswerTree.h Edge.h Term.h ECString.h \
-  Feature.h utils.h CntxArray.h
-AnsStrCounts.o: AnsStrCounts.C
-AnswerTree.o: AnswerTree.C AnswerTree.h Edge.h Term.h ECString.h \
-  Feature.h utils.h CntxArray.h
-auxify.o: auxify.C auxify.h ECString.h InputTree.h utils.h ParseStats.h \
-  SentRep.h Wrd.h ewDciTokStrm.h Term.h Feature.h
-Bchart.o: Bchart.C Bchart.h ChartBase.h Edge.h Term.h ECString.h \
-  Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h \
-  Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h InputTree.h \
-  ParseStats.h ExtPos.h GotIter.h FeatureTree.h Feat.h FBinaryArray.h
-BchartSm.o: BchartSm.C Bchart.h ChartBase.h Edge.h Term.h ECString.h \
-  Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h \
-  Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h InputTree.h \
-  ParseStats.h ExtPos.h FeatureTree.h Feat.h FBinaryArray.h GotIter.h
-Bst.o: Bst.C Bst.h Edge.h Term.h ECString.h Feature.h utils.h ValHeap.h \
-  CntxArray.h
-ChartBase.o: ChartBase.C ChartBase.h Edge.h Term.h ECString.h Feature.h \
-  utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h \
-  ValHeap.h SentRep.h GotIter.h InputTree.h ParseStats.h
-ClassRule.o: ClassRule.C ClassRule.h FullHist.h Edge.h Term.h ECString.h \
-  Feature.h utils.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h \
-  ValHeap.h Item.h MeChart.h Bchart.h ChartBase.h SentRep.h EdgeHeap.h \
-  UnitRules.h InputTree.h ParseStats.h ExtPos.h FeatureTree.h Feat.h \
-  FBinaryArray.h
-CntxArray.o: CntxArray.C CntxArray.h ECString.h
-CombineBests.o: CombineBests.C CombineBests.h AnswerTree.h Edge.h Term.h \
-  ECString.h Feature.h utils.h CntxArray.h AnsHeap.h
-ECArgs.o: ECArgs.C ECArgs.h ECString.h utils.h
-Edge.o: Edge.C Edge.h Term.h ECString.h Feature.h utils.h Item.h Wrd.h \
-  ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h ValHeap.h GotIter.h \
-  Bchart.h ChartBase.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h \
-  InputTree.h ParseStats.h ExtPos.h
-EdgeHeap.o: EdgeHeap.C Edge.h Term.h ECString.h Feature.h utils.h \
-  EdgeHeap.h
-edgeSubFns.o: edgeSubFns.C Term.h ECString.h Feature.h utils.h Edge.h \
-  headFinder.h InputTree.h ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h \
-  GotIter.h Item.h AnswerTree.h CntxArray.h Bst.h ValHeap.h FullHist.h \
-  Bchart.h ChartBase.h EdgeHeap.h UnitRules.h ExtPos.h
-EgsFromTree.o: EgsFromTree.C Bchart.h ChartBase.h Edge.h Term.h \
-  ECString.h Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h \
-  CntxArray.h Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h \
-  InputTree.h ParseStats.h ExtPos.h headFinder.h GotIter.h
-evalTree.o: evalTree.C Field.h utils.h ECString.h GotIter.h Edge.h Term.h \
-  Feature.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h \
-  ValHeap.h InputTree.h ParseStats.h SentRep.h Bchart.h ChartBase.h \
-  EdgeHeap.h FullHist.h UnitRules.h ExtPos.h ECArgs.h MeChart.h \
-  FeatureTree.h Feat.h FBinaryArray.h headFinder.h Params.h AnsHeap.h \
-  TimeIt.h extraMain.h Link.h ClassRule.h ScoreTree.h
-ewDciTokStrm.o: ewDciTokStrm.C Wrd.h ECString.h ewDciTokStrm.h
-ExtPos.o: ExtPos.C ExtPos.h Term.h ECString.h Feature.h utils.h SentRep.h \
-  Wrd.h ewDciTokStrm.h
-extraMain.o: extraMain.C extraMain.h AnswerTree.h Edge.h Term.h \
-  ECString.h Feature.h utils.h CntxArray.h InputTree.h ParseStats.h \
-  SentRep.h Wrd.h ewDciTokStrm.h Bst.h ValHeap.h Item.h MeChart.h \
-  Bchart.h ChartBase.h EdgeHeap.h FullHist.h UnitRules.h ExtPos.h \
-  FeatureTree.h Feat.h FBinaryArray.h headFinder.h ClassRule.h
-FBinaryArray.o: FBinaryArray.C FBinaryArray.h Feat.h Feature.h ECString.h \
-  FeatureTree.h
-Feat.o: Feat.C Feat.h Feature.h ECString.h utils.h
-Feature.o: Feature.C Feature.h ECString.h utils.h FeatureTree.h Feat.h \
-  FBinaryArray.h
-FeatureTree.o: FeatureTree.C FeatureTree.h Feat.h Feature.h ECString.h \
-  FBinaryArray.h
-fhSubFns.o: fhSubFns.C Term.h ECString.h Feature.h utils.h FullHist.h \
-  Edge.h Wrd.h ewDciTokStrm.h headFinder.h InputTree.h ParseStats.h \
-  SentRep.h Bchart.h ChartBase.h Item.h AnswerTree.h CntxArray.h Bst.h \
-  ValHeap.h EdgeHeap.h UnitRules.h ExtPos.h GotIter.h ClassRule.h
-Field.o: Field.C Field.h utils.h ECString.h
-FullHist.o: FullHist.C FullHist.h Edge.h Term.h ECString.h Feature.h \
-  utils.h Wrd.h ewDciTokStrm.h GotIter.h Item.h AnswerTree.h CntxArray.h \
-  Bst.h ValHeap.h
-GotIter.o: GotIter.C GotIter.h Edge.h Term.h ECString.h Feature.h utils.h \
-  Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h ValHeap.h
-headFinder.o: headFinder.C headFinder.h ECString.h InputTree.h utils.h \
-  ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h headFinderCh.h Term.h \
-  Feature.h
-headFinderCh.o: headFinderCh.C headFinderCh.h ECString.h InputTree.h \
-  utils.h ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h Term.h Feature.h
-InputTree.o: InputTree.C InputTree.h ECString.h utils.h ParseStats.h \
-  SentRep.h Wrd.h ewDciTokStrm.h headFinder.h Term.h Feature.h
-Item.o: Item.C Item.h Wrd.h ECString.h ewDciTokStrm.h Edge.h Term.h \
-  Feature.h utils.h AnswerTree.h CntxArray.h Bst.h ValHeap.h
-Link.o: Link.C Link.h ECString.h InputTree.h utils.h ParseStats.h \
-  SentRep.h Wrd.h ewDciTokStrm.h Term.h Feature.h
-MeChart.o: MeChart.C MeChart.h Bchart.h ChartBase.h Edge.h Term.h \
-  ECString.h Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h \
-  CntxArray.h Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h \
-  InputTree.h ParseStats.h ExtPos.h FeatureTree.h Feat.h FBinaryArray.h \
-  fhSubFns.h edgeSubFns.h GotIter.h headFinder.h
-oparseIt.o: oparseIt.C GotIter.h Edge.h Term.h ECString.h Feature.h \
-  utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h \
-  ValHeap.h InputTree.h ParseStats.h SentRep.h Bchart.h ChartBase.h \
-  EdgeHeap.h FullHist.h UnitRules.h ExtPos.h ECArgs.h MeChart.h \
-  FeatureTree.h Feat.h FBinaryArray.h extraMain.h AnsHeap.h Params.h \
-  Field.h TimeIt.h Link.h
-Params.o: Params.C Params.h Field.h utils.h ECString.h ECArgs.h Bchart.h \
-  ChartBase.h Edge.h Term.h Feature.h Item.h Wrd.h ewDciTokStrm.h \
-  AnswerTree.h CntxArray.h Bst.h ValHeap.h SentRep.h EdgeHeap.h \
-  FullHist.h UnitRules.h InputTree.h ParseStats.h ExtPos.h ClassRule.h
-parseAndEval.o: parseAndEval.C Field.h utils.h ECString.h GotIter.h \
-  Edge.h Term.h Feature.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h \
-  CntxArray.h Bst.h ValHeap.h InputTree.h ParseStats.h SentRep.h Bchart.h \
-  ChartBase.h EdgeHeap.h FullHist.h UnitRules.h ExtPos.h ECArgs.h \
-  MeChart.h FeatureTree.h Feat.h FBinaryArray.h headFinder.h Params.h \
-  AnsHeap.h TimeIt.h extraMain.h Link.h ClassRule.h ScoreTree.h
-parseIt.o: parseIt.C GotIter.h Edge.h Term.h ECString.h Feature.h utils.h \
-  Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h Bst.h ValHeap.h \
-  InputTree.h ParseStats.h SentRep.h Bchart.h ChartBase.h EdgeHeap.h \
-  FullHist.h UnitRules.h ExtPos.h ECArgs.h MeChart.h FeatureTree.h Feat.h \
-  FBinaryArray.h extraMain.h AnsHeap.h Params.h Field.h TimeIt.h Link.h
-ParseStats.o: ParseStats.C ECString.h ParseStats.h utils.h
-ReadTree.o: ReadTree.C ReadTree.h InputTree.h ECString.h utils.h \
-  ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h Term.h Feature.h \
-  headFinder.h
-ScoreTree.o: ScoreTree.C ScoreTree.h InputTree.h ECString.h utils.h \
-  ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h Term.h Feature.h
-SentRep.o: SentRep.C Bchart.h ChartBase.h Edge.h Term.h ECString.h \
-  Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h \
-  Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h InputTree.h \
-  ParseStats.h ExtPos.h Params.h Field.h ECArgs.h
-Term.o: Term.C Term.h ECString.h Feature.h utils.h
-TimeIt.o: TimeIt.C TimeIt.h Bchart.h ChartBase.h Edge.h Term.h ECString.h \
-  Feature.h utils.h Item.h Wrd.h ewDciTokStrm.h AnswerTree.h CntxArray.h \
-  Bst.h ValHeap.h SentRep.h EdgeHeap.h FullHist.h UnitRules.h InputTree.h \
-  ParseStats.h ExtPos.h
-UnitRules.o: UnitRules.C UnitRules.h InputTree.h ECString.h utils.h \
-  ParseStats.h SentRep.h Wrd.h ewDciTokStrm.h Feature.h Term.h
-utils.o: utils.C utils.h ECString.h Term.h Feature.h
-ValHeap.o: ValHeap.C Bst.h Edge.h Term.h ECString.h Feature.h utils.h \
-  ValHeap.h CntxArray.h

first-stage/PARSE/Wrd.h

 #include "ECString.h"
 #include <iostream>
 #include "ewDciTokStrm.h"
+#include "utils.h"
 
 class Wrd;
 class Wrd
     {
       ECString lx;
       is >> lx;
-      substBracket( w.lexeme_ );
+      escape_parens(w.lexeme_);
       return is;
     }
   friend ostream& operator<<(ostream& os, const Wrd& w)
   int toInt() const { return wInt_; }
   int& toInt() { return wInt_; }
 
-
-  static void substBracket( ECString &w )
-    {
-      if ( w.length() != 1 ) return;
-
-      switch (w[0]) 
-	{
-	case '(': w = "-LRB-"; break;
-	case ')': w = "-RRB-"; break;
-	case '{': w = "-LCB-"; break;
-	case '}': w = "-RCB-"; break;
-	case '[': w = "-LSB-"; break; 
-	case ']': w = "-RSB-"; break;
-	}
-    }
-
 private:
   ECString lexeme_;
   int loc_;

first-stage/PARSE/ewDciTokStrm.C

 
 #include "ewDciTokStrm.h"
 
-
-
-
 inline int Cap( ECString );
-
 inline int has_alnum( ECString, int );
-
 inline int has_one( char, ECString, int );
 
-void find_and_replace(std::string & tInput, std::string tFind, std::string tReplace) {
-    size_t uPos = 0;
-    size_t uFindLen = tFind.length();
-    size_t uReplaceLen = tReplace.length();
-
-    if (uFindLen == 0) {
-        return;
-    }
-
-    for (; (uPos = tInput.find(tFind, uPos)) != std::string::npos; ) {
-        tInput.replace(uPos, uFindLen, tReplace);
-        uPos += uReplaceLen;
-    }
-}
-
 ewDciTokStrm::
 ewDciTokStrm( const ECString& name )
   :
     return retWrd;
 }
 
-void escape_parens(ECString& word) {
-    find_and_replace(word, "(", "-LRB-");
-    find_and_replace(word, ")", "-RRB-");
-    find_and_replace(word, "{", "-LCB-");
-    find_and_replace(word, "}", "-RCB-");
-    find_and_replace(word, "[", "-LSB-");
-    find_and_replace(word, "]", "-RSB-");
-}
-
-
 								// page THREE
 
 ECString                     // Extract and return the first Wrd that can be

first-stage/PARSE/ewDciTokStrm.h

 ****    wsj/text/198* .  Run any "improved" version side by side with     ****
 ****   this one and inspect the actual outputs, before changing this.     ***/
 
-void find_and_replace(std::string & tInput, std::string tFind, std::string tReplace);
-void escape_parens(ECString& word);
-
 class ewDciTokStrm
 {
   public:

first-stage/PARSE/utils.C

   return ( find(sts.begin(),sts.end(),s) != sts.end() );
 }
 
-/*
-UNUSED ---------------------------------------
+void find_and_replace(std::string & tInput, std::string tFind, std::string tReplace) {
+    size_t uPos = 0;
+    size_t uFindLen = tFind.length();
+    size_t uReplaceLen = tReplace.length();
 
-double 
-ran()
-{
-    return (rand() * 4.656612875245796E-10);
+    if (uFindLen == 0) {
+        return;
+    }
+
+    for (; (uPos = tInput.find(tFind, uPos)) != std::string::npos; ) {
+        tInput.replace(uPos, uFindLen, tReplace);
+        uPos += uReplaceLen;
+    }
 }
 
-ECString lastCharacter(const ECString& s)
-{
-        ECString f;
-        int len=s.length();
-        assert(s!="");
-        int c=(int)s[len-1];
-        if (c<0||c>127) {
-                assert(len>=2);
-                f=f+s[len-2]+s[len-1];
-        }else f=f+s[len-1];
-        return f;
+void escape_parens(ECString& word) {
+    find_and_replace(word, "(", "-LRB-");
+    find_and_replace(word, ")", "-RRB-");
+    find_and_replace(word, "{", "-LCB-");
+    find_and_replace(word, "}", "-RCB-");
+    find_and_replace(word, "[", "-LSB-");
+    find_and_replace(word, "]", "-RSB-");
 }
-*/
-#if 0 // can't comment out code below since it uses '*/'
-
-void
-ignoreComment(ifstream& inpt)
-{
-  ECString nxt;
-  char a;
-  inpt.get(a);
-  if(a == '/')
-    {
-      char b = inpt.peek();
-      if(b == '*')
-	{
-	  while(inpt)
-	    {
-	      inpt >> nxt;
-	      if(nxt == "*/") break;
-	    }
-	  return;
-	}
-    }
-  inpt.putback(a);
-  return;
-}
-	  
---------------------------------------- 
-#endif // 0

first-stage/PARSE/utils.h

 typedef ECStrings::iterator ECStringsIter;
 bool vECfind(const ECString& st, ECStrings& sts);
 
+void find_and_replace(std::string & tInput, std::string tFind, std::string tReplace);
+void escape_parens(ECString& word);
 
-/* UNUSED
-double ran();
-enum DGStatus  { OK, NOT_OK };
-ECString lastCharacter(const ECString& s);
-void ignoreComment(ifstream& input);
-*/
-
-/* UNIMPLMENTED
-ECString firstCharacter(const ECString& s);
-*/
 #endif /* ! UTILS_H */
 

first-stage/TRAIN/Makefile.dep

-ClassRule.o: ClassRule.C ClassRule.h TreeHist.h InputTree.h ECString.h \
-  utils.h Term.h Feature.h headFinder.h headFinderCh.h
-ECArgs.o: ECArgs.C ECArgs.h ECString.h utils.h
-EmpNums.o: EmpNums.C EmpNums.h ECString.h utils.h
-Feat.o: Feat.C Feat.h Feature.h ECString.h utils.h
-FeatIter.o: FeatIter.C FeatIter.h Feat.h Feature.h ECString.h \
-  FeatTreeIter.h FeatureTree.h
-FeatTreeIter.o: FeatTreeIter.C FeatTreeIter.h FeatureTree.h Feat.h \
-  Feature.h ECString.h
-Feature.o: Feature.C Feature.h ECString.h
-FeatureTree.o: FeatureTree.C FeatureTree.h Feat.h Feature.h ECString.h
-InputTree.o: InputTree.C InputTree.h ECString.h utils.h headFinder.h \
-  headFinderCh.h Term.h Feature.h EmpNums.h auxify.h
-Phegt.o: Phegt.C Phegt.h ECString.h
-Pst.o: Pst.C Pst.h WordInfo.h ECString.h Phegt.h Feature.h Term.h utils.h
-Smoother.o: Smoother.C Smoother.h Feature.h ECString.h
-Term.o: Term.C Term.h ECString.h Feature.h utils.h
-UnitRules.o: UnitRules.C UnitRules.h InputTree.h ECString.h utils.h \
-  Feature.h Term.h
-auxify.o: auxify.C auxify.h ECString.h InputTree.h utils.h Term.h \
-  Feature.h
-ccInd.o: ccInd.C ccInd.h InputTree.h ECString.h utils.h Term.h Feature.h
-getProbs.o: getProbs.C getProbs.h ClassRule.h TreeHist.h InputTree.h \
-  ECString.h utils.h ECArgs.h Feature.h FeatureTree.h Feat.h headFinder.h \
-  headFinderCh.h treeHistSf.h Pst.h WordInfo.h Phegt.h Smoother.h Term.h \
-  trainRsUtils.h
-headFinder.o: headFinder.C headFinder.h ECString.h InputTree.h utils.h \
-  headFinderCh.h Term.h Feature.h
-headFinderCh.o: headFinderCh.C headFinderCh.h ECString.h InputTree.h \
-  utils.h Term.h Feature.h
-iScale.o: iScale.C ECArgs.h ECString.h utils.h FeatIter.h Feat.h \
-  Feature.h FeatTreeIter.h FeatureTree.h Term.h
-kn3Counts.o: kn3Counts.C ECArgs.h ECString.h Feature.h FeatureTree.h \
-  Feat.h FeatTreeIter.h InputTree.h utils.h headFinder.h headFinderCh.h \
-  treeHistSf.h TreeHist.h Term.h Pst.h WordInfo.h Phegt.h
-pSfgT.o: pSfgT.C ECArgs.h ECString.h Term.h Feature.h utils.h InputTree.h \
-  headFinder.h headFinderCh.h Pst.h WordInfo.h Phegt.h
-pSgT.o: pSgT.C ECArgs.h ECString.h Term.h Feature.h utils.h InputTree.h \
-  headFinder.h headFinderCh.h UnitRules.h
-pTgNt.o: pTgNt.C ECArgs.h ECString.h Term.h Feature.h utils.h InputTree.h \
-  headFinder.h headFinderCh.h Pst.h WordInfo.h Phegt.h
-pUgT.o: pUgT.C ECArgs.h ECString.h Term.h Feature.h utils.h InputTree.h \
-  headFinder.h headFinderCh.h Pst.h WordInfo.h Phegt.h
-rCounts.o: rCounts.C ECArgs.h ECString.h Feature.h FeatureTree.h Feat.h \
-  InputTree.h utils.h headFinder.h headFinderCh.h treeHistSf.h TreeHist.h \
-  Term.h Pst.h WordInfo.h Phegt.h ClassRule.h
-selFeats.o: selFeats.C Feat.h Feature.h ECString.h FeatIter.h \
-  FeatTreeIter.h FeatureTree.h utils.h ECArgs.h
-trainRs.o: trainRs.C trainRsUtils.h ECArgs.h ECString.h Feature.h \
-  FeatureTree.h Feat.h InputTree.h utils.h headFinder.h headFinderCh.h \
-  treeHistSf.h Pst.h WordInfo.h Phegt.h Smoother.h TreeHist.h Term.h \
-  ClassRule.h
-trainRsUtils.o: trainRsUtils.C trainRsUtils.h ECArgs.h ECString.h \
-  Feature.h FeatureTree.h Feat.h InputTree.h utils.h headFinder.h \
-  headFinderCh.h treeHistSf.h Pst.h WordInfo.h Phegt.h Smoother.h \
-  TreeHist.h Term.h ClassRule.h
-treeHistSf.o: treeHistSf.C TreeHist.h InputTree.h ECString.h utils.h \
-  treeHistSf.h Term.h Feature.h Pst.h WordInfo.h Phegt.h headFinder.h \
-  headFinderCh.h Feat.h ccInd.h ClassRule.h
-utils.o: utils.C utils.h ECString.h Term.h Feature.h

first-stage/TRAIN/pUgT.C

       if(wi->c() <= 2)
 	{
 	  posUCounts[lhsInt]++;
-	  char* hyppos =  strpbrk(hdLex.c_str(), "-");
+	  const char* hyppos =  strpbrk(hdLex.c_str(), "-");
 	  if(hyppos) posDashCounts[lhsInt]++;
 	}
       return;
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.